ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[toc] ## 将基于日志的复制变更为基于GTID的复制处理步骤 ### **先决条件** 1. 集群中所有的服务器版本均高于5.7.6 2. 集群中所有的服务器gtid\_mode都设置为off(使用 show variables like 'gtid\_mode' 命令查看) ### 设置参数 gtid\_mode在5.7版本有一下4个值 * off:关闭 * off\_permissive:准备关闭 * on\_permissive:准备开启 * on:开启 这4个值只能从`off-->off\_permissive-->on\_permissive-->on`或者(`off<--off\_permissive<--on\_permissive<--on`)的顺序设置 >[info] 在设置的过程中用`tail -f`命令查看一下`mysql-error.log`是否有异常信息。 #### master ~~~ set @@global.enforce_gtid_consistency=warn; //强制设置gtid一致性,值为:warn。 set @@global.enforce_gtid_consistency=on; //强制设置gtid一致性,值为:on set @@global.gtid_mode=off_permissive; //设置gtid_mode为准备关闭状态 set @@global.gtid_mode=on_permissive; //设置gtid_mode为准备开启状态 # 查看从服务器 show status like 'ongoing_anonymous_transaction_count' 为0或者空以后设置 set @@global.gtid_mode=on;                       //设置gtid_mode为开启状态 ~~~ **show status like 'ongoing\_anonymous\_transaction\_count'** 查看基于日志的复制的事务数量,为0或者为空表示正常。这一步是为了保证基于日志复制的数据的一致性,防止有事务在主服务器上执行完成,在从服务器上没有被执行,导致数据丢失 #### slave ~~~ set @@global.enforce_gtid_consistency=warn; //强制设置gtid一致性,值为:warn。 set @@global.enforce_gtid_consistency=on; //强制设置gtid一致性,值为:on set @@global.gtid_mode=off_permissive; //设置gtid_mode为准备关闭状态 set @@global.gtid_mode=on_permissive; //设置gtid_mode为准备开启状态 set @@global.gtid_mode=on;                       //设置gtid_mode为开启状态 stop slave; # 关闭主从复制 change master to master_auto_position=1 # 改变复制方式 start slave; # 重启主从复制 show slave status; # 查看当前复制状态 ~~~ ![](https://i.vgy.me/vkLfYt.png) ![](https://i.vgy.me/ErtCWN.png) ### 持久配置(重要操作) 确认成功切换到基于事物的复制之后,需要将一下2个参数添加到my.cnf中(所有的mysql服务器节点) 保证在下次重启mysql服务器的时候会自动的启动全局事物复制的方式进行主从同步 * enforce\_gtid\_consistency=on * gtid\_mode=on ## 将基于事物复制变更为基于日志的复制 由于工具或接入的第三方应用不支持事务的复制,则要改为基于日志的复制    ### **先决条件** 1. 集群中所有的服务器版本均高于5.7.6 2. 集群中所有的服务器gtid\_mode都设置为on(使用 show variables like 'gtid\_mode' 命令查看) ### 配置步骤 #### master ``` # 获得file和position,然后去slave切换为日志复制 show master status; set @@global.gtid_mode=on_permissive; -- 设置gtid_mode为准备开启状态 set @@global.gtid_mode=off_permissive; -- 设置gtid_mode为准备关闭状态 select @@global.gtid_owned; -- 查看gtid_ownend是否为空字符串(在所有服务器上均要查看) set @@global.gtid_mode=off; -- 关闭 ``` #### slave ``` stop slave; change master to master_auto_position=0,master_log_file='edu-mysql-bin.000006',master_log_pos=461; -- //停止事务复制,设置日志复制的日志文件和日志文件节点 start slave; set @@global.gtid_mode=on_permissive; -- 设置gtid_mode为准备开启状态 set @@global.gtid_mode=off_permissive; -- 设置gtid_mode为准备关闭状态 select @@global.gtid_owned; -- 查看gtid_ownend是否为空字符串(在所有服务器上均要查看) set @@global.gtid_mode=off; -- 关闭 show slave status; ``` ![](https://i.vgy.me/uKVGvV.png) ### 持久配置 修改my.cnf中(所有的mysql服务器节点) * enforce\_gtid\_consistency=off * gtid\_mode=off