GTID复制 (Global Transaction ID 全局事务标识符)
GTID(Global Transaction ID 全局事务标识符) MySQL 5.6 版本开始支持,但不太成熟,建议使用 MySQL5.7以上版本的GTID功能 MySQL5.6版本出现没有默认开启,5.7中即使不开启也有匿名的GTID记录.
1、开启GTID功能可以支持多DUMP线程的并发复制,而且MySQL5.6实现了基于库级别多SQL线程并发.在MySQL5.7利用GTID的 Logic clock 逻辑时钟.保证了同库级别下的事务顺序问题.即可以实现基于事务级别的并发回放.从而大大减少了同步的延迟
2、同时GTID具有幂等性特性,即多次执行结果是一样的
3、利用 GTID复制不像传统的复制方式(异步复制,半同步复制)需要找到binlog文件名和POS点,只需知道master的IP,端口,账号,密码即可.开启GTID后,执行change master to master_auto_position=1即可,它会自动寻找到相应的位置开始同步
GTID优点
保证事务全局统一
截取日志更加方便.跨多文件,判断起点终点更加方便
判断主从工作状态更加方便
传输日志,可以并发传输.SQL回放可以更高并发
主从复制构建更加方便
GTID服务器相关选项
gtid_mode gtid模式
enforce_gtid_consistency 保证GTID安全的参数
GTID配置范例
1.主服务器
vim /etc/my.cnf
server-id=8
plugin-load-add = "semisync_master.so"
rpl_semi_sync_master_enabled=ON
rpl_semi_sync_master_timeout=3000
gtid_mode=ON
enforce_gtid_consistency
2.从服务器
vim /etc/my.cnf
server-id=18
plugin-load-add = "semisync_slave.so"
rpl_semi_sync_slave_enabled=ON
gtid_mode=ON
enforce_gtid_consistency
如果主服务器和从服务器数据不一致,需要先将主库数据备份还原至从库,再执行下面操作
mysqldump -A --master-data=2 > /backup/full.sql
如果之前配置过下面的命令,就先停止从节点清除之后再配置
停止:stop slave;
清除:reset slave all;
mysql> CHANGE MASTER TO
MASTER_HOST='10.0.0.105',
MASTER_USER='repluser',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_AUTO_POSITION=1;#使用GTID
mysql> start slave;
注意观察:Retrieved_Gtid_set和Executed_Gtid_Set这两个值,对比主节点执行show master status的值,如果相同表示同步完成
设置了GTID,不管二进制新旧,只要存在,加上备份,就可以恢复数据,
如果reset master;二进制清除了,那就找不回来了
开启dump线程并发数 (8.26版本以上)
从节点配置文件中加
slave-parallel-workers=4
重启mysql systemctl restart mysqld
查看dump线程开启数量
mysql> select @@slave_parallel_workers;