Mysq主从复制是构建大型,高性能网站,保证数据安全性,完整性的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机(master)的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件(bin-log),并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。
环境:
操作系统: centos6.7
mysql版本: mysql5.5
IP:192.168.1.160(主master) 192.168.1.180(从slave)
配置步骤:
1、创建复制账号
mysql> grant replication client,replication slave on *.* to 'repl'@'192.168.1.%' identified by '123456';
2、拷贝数据
保持主从服务器上当前数据一致
3、配置主(master)服务器
打开主服务器 mysql 配置文件 一般linux系统下再 /etc/my.cnf (根据mysql配置文件位置调整)
[root@localhost /]# vim /etc/my.cnf
接下来对master进行配置,包括打开二进制日志,指定唯一的servr ID。例如,在配置文件加入如下值:
server-id=1
log-bin=mysql-bin
binlog-format=mixed
server-id:为主服务器A的ID值
log-bin:二进制变更日值
binlog-format:二进制日志记录变化形式 参数 1 、statement 二进制记录执行语句 2、row 二进制记录磁盘变化 3、mixed 混合 由系统根据语句自动判断
重启master
[root@localhost /]# service mysqld restart
运行SHOW MASTER STATUS,
mysql> show master status;
输出如下:
4、配置从(slave)服务器
打开从服务器 mysql 配置文件
[root@localhost /]# vim /etc/my.cnf
接下来对 slave 进行配置,包括打开二进制日志,指定唯一的servr ID。例如,在配置文件加入如下值:
server-id=2
log-bin=mysql-bin [ *注意*: 如果从服务器作为其他服务器的主服务器需开启,否则可以忽略]
binlog-format=mixed
relay-log=mysql-relay-bin
log-slave-updates=0 [*根据主服务器设置 一般为0]
server-id:为主服务器B的ID值
log-bin:二进制变更日值
binlog-format:二进制日志记录变化形式 参数 1 、statement 二进制记录执行语句 2、row 二进制记录磁盘变化 3、mixed 混合 由系统根据语句自动判断
relay-log:配置中继日志,
log_slave_updates表示slave将复制事件写进自己的二进制日志(后面会看到它的用处)。
重启slave
[root@localhost /]# service mysqld restart
5、启动slave
接下来就是让slave连接master,并开始重做master二进制日志中的事件。使用CHANGE MASTER TO语句,该语句可以完全取代对配置文件的修改,而且它可以为slave指定不同的master,而不需要停止服务器。如下:
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.160',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='123456',
-> MASTER_LOG_FILE='mysql-bin.000003',
-> MASTER_LOG_POS=0;
MASTER_LOG_POS的值为0,因为它是日志的开始位置。
启动slave
mysql> START SLAVE;
你可以用SHOW SLAVE STATUS语句查看slave的设置是否正确:
主要看这两项:
Slave_IO_Running=Yes
Slave_SQL_Running=Yes
你可查看master和slave上线程的状态。在master上,你可以看到slave的I/O线程创建的连接:
在master上输入show processlist\G; 查看状态
在slave上输入show processlist\G; 查看状态
在 master 插入一条数据,测试一下,你会发现 slave 服务器会有一条相同的数据。
* stop slave 停止slave start slave 开启slave
热门文章