通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。通俗点说就是select查询发送到从服务器,修改数据的语句发送到主服务器,以此来降低主服务器的查询处理压力
MySQL主从是基于binlog的,主服务器必须开启binlog才能进行主从。3个过程实现,其中一个过程在主服务器上,另外两个过程发生在从服务器上。
以centos7下的lnmp集成包为例,保持两台主机网络畅通
首先要考虑防火墙影响,要么关闭防火墙;
[root@localhost jack]# systemctl stop firewalld.service
要么在防火墙里添加开放3306端口的规则:
[root@localhost jack]# firewall-cmd --zone=public --add-port=3306/tcp --permanent [root@localhost jack]# firewall-cmd --reload
1、修改主服务器上:/etc/my.cnf
server-id = 1 log-bin = mysql-bin #主从服务的核心 定义binblog日志的前缀名 binlog-do-db=test #需要同步的数据库,如果没有本行,即表示同步所有的数据库 binlog-do-db=mydb #需要同步的数据库,同时同步test、mydb库 binlog-ignore-db=mysql #被忽略的数据库
在主服务器创建一个专门用来同步的用户,注意下面:
*.*
指定能操作所有的表和库;mysync
表示在系统中创建一个用户,用于负责主从工作;%
表示允许所有主机,# GRANT REPLICATION SLAVE ON *.* TO 'mysync'@'%' IDENTIFIED BY '12345678'; mysql> GRANT REPLICATION SLAVE ON *.* TO 'mysync'@'192.168.0.251' IDENTIFIED BY '12345678'; mysql> show master status; // 等着 留意file 和postion字段
锁定数据库,此时不允许更改任何数据,当然也可以省略这一步,只要我们人为的不操作数据就好
mysql> flush tables with read lock;
查看主服务器当前状态,这些数据是要记录的,一会要在slave服务器端用到
mysql> show master status; // 等着 留意file 和postion字段 +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000006 | 511 | test,mydb | | +------------------+----------+--------------+------------------+
1、修改主服务器上:/etc/my.cnf
server-id = 251 //保证唯一性
2、设置从服务
mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.253',MASTER_USER='mysync', MASTER_PASSWORD='12345678',MASTER_LOG_FILE='mysql-bin.000006',MASTER_LOG_POS=511;
status
mysql> start slave #开启从服务 mysql> show slave status\G #查看从服务状态
如下两个选项都为yes标明主从成功
Slave_IO_Running:Yes Slave_SQL_Running:yes
出现
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
解决
find / -name auto.cnf
删除auto.cnf文件内容
具体自己测试,聂哥就不管了,其实就简单创建一个表,或添加几条数据就能测试
主从复制搭建起来不算难,只要按照上面步骤来,一般不会有问题。但是一旦我们不小心在slave服务器上写了数据,那么主从也就被破坏了。 另外如果非要重启master服务器,一定要先把slave服务器停掉,也就是说需要在slave上去执行 slave stop
命令,然后再去重启master服务器上的mysql服务,否则很有可能就会中断了。 当然重启完后,还需要把slave服务器给开启 slave start
.