作者公众号,欢迎一起交流。

前面介绍了基于binlog位点和文件名称的复制,那么如何在不停机的情况下,实现普通复制模式与基于GTID的复制模式的切换呢,可通过如下步骤进行切换。
1 在线将普通复制模式切换至GTID模式
1)在所有服务器上设置enforce_gtid_consistency选项为warn,必须执行,防止出现warning,以便执行下一步操作
mysql> set global enforce_gtid_consistency=warn;
Query OK, 0 rows affected (0.00 sec)2)在所有服务器上设置enforce_gtid_consistency选项为on,确保所有的事务都不违反GTID的一致性
mysql> set global enforce_gtid_consistency=on;
Query OK, 0 rows affected (0.00 sec)3)在所有服务器上设置gtid_mode选项为off_permissive,该操作允许新事务是匿名的,允许复制的事务是GTID或匿名的
mysql> set global gtid_mode=off_permissive;
Query OK, 0 rows affected (0.04 sec)4)在所有服务器上设置gtid_mode选项为on_permissive,该操作允许新事务是GTID的,允许复制的事务是GTID或匿名的
mysql> set global gtid_mode=on_permissive;
Query OK, 0 rows affected (0.12 sec)5)在所有从库检查Ongoing_anonymous_transaction_count选项,直到已标记为匿名的正在进行的事务的数量为0
mysql> show status like 'ongoing_anonymous_%';
+-------------------------------------+-------+
| Variable_name | Value |
+-------------------------------------+-------+
| Ongoing_anonymous_transaction_count | 0 |
+-------------------------------------+-------+
1 row in set (0.00 sec)6)在所有服务器上设置gtid_mode选项为on
mysql> set global gtid_mode=on;
Query OK, 0 rows affected (0.12 sec)7)在所有从库执行,开启GTID协议,可将配置写到my.cnf配置文件
mysql> stop replica;
Query OK, 0 rows affected (0.01 sec)
mysql> change replication source to source_auto_position=1;
Query OK, 0 rows affected (0.03 sec)
mysql> start replica;
Query OK, 0 rows affected (0.01 sec)2 在线将GTID模式切换至普通复制模式
1)在所有从库停止复制
mysql> stop replica;
Query OK, 0 rows affected (0.01 sec)2)在所有从库关闭自动GTID
mysql> change replication source to source_auto_position=0;
Query OK, 0 rows affected (0.02 sec)3)启动复制
mysql> start replica;
Query OK, 0 rows affected (0.01 sec)4)在所有服务器上设置gtid_mode选项为on_permissive
mysql> set global gtid_mode=on_permissive;
Query OK, 0 rows affected (0.02 sec)5)在所有服务器上设置gtid_mode选项为off_permissive
mysql> set global gtid_mode=off_permissive;
Query OK, 0 rows affected (0.13 sec)6)检查所有的服务器gtid_owned为空
mysql> select @global.gtid_owned;
+----------------------------------------+
| @global.gtid_owned |
+----------------------------------------+
| NULL |
+----------------------------------------+
1 row in set (0.00 sec)7)在所有服务器上设置gtid_mode选项为off,可将配置写到my.cnf配置文件
mysql> set global gtid_mode=off;
Query OK, 0 rows affected (0.11 sec)以上就是普通复制模式与基于GTID复制模式在线相互切换过程,可以看到,两种模式是相反的过程。需要注意的是gtid_mode选项值的设置,分别是off、off_permissive、on_permissive和on,值的修改是按顺序的,不能跨值进行修改。