MySQL GTID (二)

MySQL GTID 系列之二

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

环境见上篇系列文章mysql

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

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
相关文章
相关标签/搜索