主从设备的同步(基于binlog和gtid实现同步)
一、原理
1、MySQL将数据变化记录到二进制日志中;
2、Slave将MySQL的二进制日志拷贝到Slave的中继日志中;
3、Slave将中继日志中的事件在做一次,将数据变化,反应到自身(Slave)的数据库
以便:
灾备
数据分布
负载平衡
读写分离
提高并发能力
二、工作过程
1、从库通过手工执行change master to 语句连接主库,提供了连接的用户一切条件(user 、password、port、ip),并且让从库知道,二进制日志的起点位置(file名 position 号); start slave
2、从库的IO线程和主库的dump线程建立连接。
3、从库根据change master to 语句提供的file名和position号,IO线程向主库发起binlog的请求。
4、主库dump线程根据从库的请求,将本地binlog以events的方式发给从库IO线程。
5、从库IO线程接收binlog events,并存放到本地relay-log中,传送过来的信息,会记录到master.info中
6、从库SQL线程应用relay-log,并且把应用过的记录到relay-log.info中,默认情况下,已经应用过的relay 会自动被清理purge
方法一:基于binlog日志实现主从同步
前提:2台设备的mysql版本最好相同
1.主设备的配置
(1.配置 /etc/my.cnf.d/mysql-server.cnf子配置文件并重启mysql服务。
[root@localhost ~]#vim /etc/my.cnf.d/mysql.server.cnf----先配
[root@localhost ~]#systemctl restart mysqld---后重启
(2. 授权用户
[root@localhost ~]# systemctl restart mysqld
2. 从设备配置
(1.配置 /etc/my.cnf.d/mysql-server.cnf子配置文件并重启mysql服务。
[root@localhost ~]#vim /etc/my.cnf.d/mysql.server.cnf----先配
[root@localhost ~]#systemctl restart mysqld---后重启
(2.关闭从设备---stop slave 并 配置参数--change master to
(3.开启从设备并检查slave状态
注:出现上述情况可能是因为
1.配置子配置文件是没有重启
2.防火墙和seliunx的原因
正确的slave状态应为双‘yes’:
(4.测试
在主设备山上进行相应操作,到从设备上观察。
方法二:基于gtid实现主从同步
在binlog方法的文件配置基础上开启gtid
开启gtid
gtid_mode=ON
enforce-gtid-consistency=ON
1.主设备配置
(1.配置 /etc/my.cnf.d/mysql-server.cnf子配置文件并重启mysql服务。
[root@localhost ~]#vim /etc/my.cnf.d/mysql.server.cnf----先配
[root@localhost ~]#systemctl restart mysqld---后重启
查看gtid是否开启
2.从设备配置
(1.配置 /etc/my.cnf.d/mysql-server.cnf子配置文件并重启mysql服务。
[root@localhost ~]#vim /etc/my.cnf.d/mysql.server.cnf----先配
[root@localhost ~]#systemctl restart mysqld---后重启
(2.从设备参数配置 --change master to
mysql> change master to
> MASTER_HOST = '192.168.63.11',
> MASTER_PORT = port,
> MASTER_USER = 'rep',
> MASTER_PASSWORD = '123456',
> MASTER_AUTO_POSITION = 1;
或者
mysql> CHANGE REPLICATION SOURCE TO
> SOURCE_HOST = '192.168.63.11',
> SOURCE_PORT = port,------可选项,若端口改变一定要加
> SOURCE_USER = 'rep',
> SOURCE_PASSWORD = '1213456',
> SOURCE_AUTO_POSITION = 1;
(3.启动从设备并观察状态和测试
mysql> START SLAVE;