1. 检查主从库中是否有不支持GTID事务的执行
本步骤在主从库机器执行。
设置ENFORCE_GTID_CONSISTENCY = WARN,最好是在有事务执行的时间段,检查日志是否有告警产生
mysql>SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN;
如果步骤一没有告警产生,设置ENFORCE_GTID_CONSISTENCY为ON。
2. 主从库设置ENFORCE_GTID_CONSISTENCY为ON
本步骤在主从库机器执行。
mysql >SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY=ON;
3. 主从库设置GTID_MODE = OFF_PERMISSIVE
本步骤在主从库机器执行。
OFF_PERMISSIVE:不产生GTID事务, Slave接受不带GTID的事务(匿名事务)也接受带GTID的事务
mysql>SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
4. 主从库设置GTID_MODE = ON_PERMISSIVE
本步骤在主从库机器执行。
ON_PERMISSIVE:新事务为gtid事务,slave接受GTID事务也接受不带GTID事务
mysql>SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
本步骤在主从库机器执行。
mysql >SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';
注:若该命令结果不为0,请等待至结果为0,才可向下执行。
6. 主从库设置GTID_MODE=ON
本步骤在主从库机器执行。
mysql >SET @@GLOBAL.GTID_MODE = ON;
本步骤在从库机器执行。
mysql >stop slave;
mysql >change master to master_auto_position=1;
mysql >start slave;
本步骤在从库机器执行。
mysql >show slave status\G;
注:Slave_IO_Running、Slave_SQL_Running为双Yes;Auto_Position=1;Retrieved_Gtid_Set和Executed_Gtid_Set显示为GTID号表明模式修改完成。
本步骤在主从库机器执行。
gtid-mode=ON
enforce-gtid-consistency=1
10. 设置主从复制的多线程复制
本步骤在从库机器执行。
mysql> stop slave;
mysql> set global slave_preserve_commit_order=1;
mysql> set global slave_parallel_type=LOGICAL_CLOCK;
mysql> set global slave_parallel_workers=4;
mysql> start slave;
mysql> show processlist;
说明:
slave_preserve_commit_order 参数在多线程复制环境下,能够保证从库回放relay log事务的顺序与这些事务在relay log中的顺序完全一致,也就是与主库提交的顺序完全一致。
该参数起作用的前提条件是开启多线程复制:
slave_parallel_type=LOGICAL_CLOCK
slave_parallel_workers>0
slave_preserve_commit_order = 1
slave_parallel_type = LOGICAL_CLOCK
slave_parallel_workers = 4
至此完成。