[摘要]+----+------+rows in set (0.00 sec)如下为在线变更的具体的操作步骤:前提:1.要求所有的mysql版本5.7.6或更高的版本。2.目前拓扑结构中所有的mysql的g...
+----+------+
rows in set (0.00 sec)
如下为在线变更的具体的操作步骤:
前提:
1.要求所有的mysql版本5.7.6或更高的版本。
2.目前拓扑结构中所有的mysql的gtid_mode的值为off状态。
3.如下的操作步骤都是有序的,不要跳跃着进行。
补充一下全局系统变量GTID_MODE变量值说明:
OFF 新事务是非GTID, Slave只接受不带GTID的事务,传送来GTID的事务会报错
OFF_PERMISSIVE 新事务是非GTID, Slave即接受不带GTID的事务也接受带GTID的事务
ON_PERMISSIVE 新事务是GTID, Slave即接受不带GTID的事务也接受带GTID的事务
ON 新事务是GTID, Slave只接受带GTID的事务
需要注意的是,这几个值的改变是有顺序的,即
off<--->OFF_PERMISSIVE<--->ON_PERMISSIVE<--->ON
不能跳跃执行,会报错。
step1:在每个mysql实例上,将ENFORCE_GTID_CONSISTENCY设置为warning,哪台先执行不影响结果。
[zejin] 3302>set @@global.enforce_gtid_consistency=warn;
Query OK, 0 rows affected (0.00 sec)
[zejin] 3301>set @@global.enforce_gtid_consistency=warn;
Query OK, 0 rows affected (0.00 sec)
注意:执行完这条语句后,如果出现GTID不兼容的语句用法,在错误日志会记录相关信息,那么需要调整应该程序避免不兼容的写法,直到完全没有产生不兼容的语句,可以通过应该程序去排查所有的sql,也可以设置后观察错误日志一段时间,这一步非常重要。
step2:在每个mysql实例上,设置ENFORCE_GTID_CONSISTENCY为ON,哪台先执行不影响结果
在第一步完成后,就可以将值设置为on。
[zejin] 3301>set @@global.enforce_gtid_consistency=on;
Query OK, 0 rows affected (0.03 sec)
[zejin] 3302>set @@global.enforce_gtid_consistency=on;
Query OK, 0 rows affected (0.00 sec)
step3:在每个mysql实例上,设置GTID_MODE为off_permissiv;哪台先执行不影响结果
[zejin] 3301>SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
Query OK, 0 rows affected (0.00 sec)
[zejin] 3302>SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
Query OK, 0 rows affected (0.00 sec)
step4:在每个mysql实例上,设置GTID_MODE为on_permissiv;;哪台先执行不影响结果
[zejin] 3302>SET @@GLOBAL.GTID_MODE = on_permissive;
Query OK, 0 rows affected (0.00 sec)
[zejin] 3301>SET @@GLOBAL.GTID_MODE = on_permissive;
Query OK, 0 rows affected (0.01 sec)
step5:在每个mysql实例上检查变量ONGOING_ANONYMOUS_TRANSACTION_COUNT
[zejin] 3301>SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';
+-------------------------------------+-------+
关键词:详细说明MySQL5.7不停业务将传统复制变更为GTID复制的示例代码