原理
- Master服务器将数据的改变记录二进制Binlog日志,当Master上的数据发生改变时,则将其改变写入二进制日志中。
- Slave服务器会在一定时间间隔内对Master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求Master二进制事件,同时主节点为每个I/O线程启动一个Dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后I/OThread和SQLThread将进入睡眠状态,等待下一次被唤醒。
实现
master主服务器的配置
1.在mysql的my.ini文件中添加以下配置:
# 主服务器
server-id=1 #[必须]服务器唯一ID
log-bin=mysql-bin #[必须]启用二进制日志
# 同步的数据库,除此之外别的不同步(和下面binlog-ignore-db二选一)
#binlog_do_db=test
#不同步数据库,除此之外都同步
#binlog-ignore-db = information_schema
#binlog-ignore-db = mysql
2.创建复制帐户并授权slave:
grant replication slave on *.* to 'mysync'@'%' identified by '123456';
备注:%表示所有客户端都可连接,可指定具体IP,如192.168.31.155
3.重启mysql服务并查看master的状态:
show master status;
如上图所示,则master主服务器配置成功
slave从服务器的配置
1.在mysql的my.ini文件中添加以下配置:
# 从服务器
server-id=2 #[必须]服务器唯一ID
log-bin=mysql-bin #[必须]启用二进制日志
read_only=1 #针对普通MySQL数据库用户设置为只读
#super_read_only=1 #针对super类MySQL数据库用户设置为只读,比如root用户
2.重启mysql服务并连接master主服务器:
change master to master_host='192.168.43.56', master_user='mysync', master_password='123456',master_log_file='mysql-bin.000004', master_log_pos=120;
备注:master_host对应主服务器的IP地址
master_user对应主服务器的用户
master_log_file对应show master status显示的File列:master-bin.000004
master_log_pos对应show master status显示的Position列:120
3.启动slave数据同步:
start slave;
4.查看slave的状态:
show slave status\G;
如上图所示,Slave_IO_Running和Slave_SQL_Running都为yes,则表示同步成功
注意:1.主从服务器mysql版本要一致,特别是高版本为主,低版本为从的情况下,会导致同步失败
2.从服务器可以设置数据库为只读,防止误改从库数据,导致主从数据不一致