MySQL GTID (二)

MySQL GTID 系列之二

三.在线将GTID转化为传统模式

环境见上篇系列文章

关闭GTID,不用停止服务,不影响线上业务

3.1 关闭GTID复制,调整为传统复制

SLVAE实例上停止复制

STOP SLAVE

SLVAE实例上查看复制的位置

SHOW SLAVE STATUS \G
# 查看 Master_Log_File 和 Read_Master_Log_Pos对应的值
binlog.000012:1821

重新 CHANGE MASTER

CHANGE MASTER TO MASTER_AUTO_POSITION=0,
MASTER_LOG_FILE='binlog.000012',
MASTER_LOG_POS=1821;

开启SLAVE

START SLAVE;

3.2 所有服务器上设置GTID模式为 ON_PERMISSIVE

SET @@GLOBAL.GTID_MODE=ON_PERMISSIVE;

3.3 所有服务器上设置GTID模式为 OFF_PERMISSIVE

SET @@GLOBAL.GTID_MODE=OFF_PERMISSIVE;

3.4 等待所有服务器上的变量@@GLOBAL.GTID_OWNED为空,它表示正在由线程执行的全局GTID集合

mysql> SELECT @@GLOBAL.GTID_OWNED;
+---------------------+
| @@GLOBAL.GTID_OWNED |
+---------------------+
| |
+---------------------+
1 row in set (0.00 sec)

3.5 等待所有SLAVE上都复制完成匿名事务。

3.6 所有服务器上关闭GTID.

SET @@GLOBAL.GTID_MODE=OFF;

3.7 修改配置文件,以便下次重启,配置也是生效的。

gtid_mode=OFF
enforce_gtid_consistency=OFF

四. 传统模式转换为GTID模式

MySQL5.7.6版本以后,支持在线修改GTID模式

4.1 所有服务器上设置ENFORCE_GTID_CONSISTENCY=WARN,使得所有事务允许违反GTID的一致性

SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY=WARN;

4.2 所有服务器上设置ENFORCE_GTID_CONSISTENCY=ON.确保所有事务不能违反GTID的一致性

SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY=ON;

4.3 所有服务器上设置GTID_MODE=OFF_PERMISSIVE

SET @@GLOBAL.GTID_MODE=OFF_PERMISSIVE;

4.4 所有服务器上设置GTID_MODE=ON_PERMISSIVE

SET @@GLOBAL.GTID_MODE=ON_PERMISSIVE;

4.5 等待所有从库 ONGOING_ANONYMOUS_TRANSACTION_COUNT为0

SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';

4.6 所有服务器上设置 GTID_MODE=ON,开启GTID

SET @@GLOBAL.GTID_MODE=ON;

4.7 修改配置文件,以便下次重启,配置也是生效的。

gtid_mode=ON
enforce_gtid_consistency=1

posted @ 2018-07-29 22:10  chinesern  阅读(710)  评论(0)    收藏  举报