基于MySQL5.7GTID在线切换

在线切换的版本要>=5.7.6

gitd_mode 解释
OFF 不产生GTID,Slave只接收不带GTID的事务
OFF_PERMISSIVE 不产生GTID,Slave接收不带GTID的事务也接收带GTID的事务
ON_PERMISSIVE 产生GTID,Slave接收不带GTID的事务也接收带GTID的事务
ON 产生GTID,Slave只接收带GTID的事务

环境

  • MySQL版本为5.7.18
  • Master
    • 192.168.1.102 3306 GTID
  • Slave
    • 192.168.1.103 3306 GTID

实验一 将GTID的环境切换到非GTID

  • stop slave;
  • change master to master_auto_position=0;
  • start slave;
  • 主从库执行set @@GLOBAL.GTID_MODE = ON_PERMISSIVE
  • 主库执行set @@GLOBAL.GTID_MODE = OFF_PERMISSIVE
  • 这个时候已经从gtid转到传统复制了,不过还是中间状态
  • 在从库执行set @@GLOBAL.GTID_MODE = OFF_PERMISSIVE
  • 主从库执行select @@GLOBAL.GTID_OWNED;是不是为空
  • 主库执行set global gtid_mode=0;
  • 主库执行set global enforce_gtid_consistency=off;
  • 记得配置文件修改

实验二 将传统复制切换到GTID复制

  • 在主从库执行set global enforce_gtid_consistency=WARN;
  • 在主从库执行 set global enforce_gtid_consistency=on;
  • 主从库执行set @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
  • 在从库执行set @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
  • 在主库执行set @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
  • 查看show status like 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';是否为0,等于0是表示所有连接都转为gtid复制
  • 主从库执行set global gtid_mode=on;
  • stop slave;
  • change master to master_auto_position=1;
  • start slave;
  • 记得更改配置文件
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容