基于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;
  • 记得更改配置文件

你可能感兴趣的:(基于MySQL5.7GTID在线切换)