MySQL 8.0 高可用之在线切换普通复制模式与GTID复制模式

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

 前面介绍了基于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,值的修改是按顺序的,不能跨值进行修改。


版权声明:本文为Alen_Liu_SZ原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。