GTID复制之二

在线启用GTID,这样就不会对生产造成影响。

1.在每个Server上,执行 SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY=WARN;确保在ErrorLog中没有WARN【警告】,若有请修复后再进行下一下。

2.在每个Server上,执行SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY=ON;

3.在每个Server上,执行SET @@GLOABL.GTID_MODE=OFF_PERMISSIVE;该步在Server间的执行先后无关,一定要在所有Server都执行守我后在进行下一下。

4.在每个Server上,执行SET @@GLOABL.GTID_MODE=ON_PERMISSIVE;

5.等待直到所有Server上的ONGOING_ANONYMOUS_TRANSACTION_COUNT都为0.可用下面检测:
  SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';

6.确保每个slave上的anonymous transactions都复制完成,用于在线切换复制模式:先在Master上 SHOW MASTER STATUS;再在每个Slave上执行以确定要等待的时间:SELECT MASTER_POS_WAIT(file,position);

 7.在每个Server上,执行 SET @@GLOBAL.GTID_MODE=ON;

8.修改每个Server上的配置文件,添加gtid_mode=ON;为了在启动时自动Fail-over,可以执行下面的,若为多源复制,则要为每个channel执行。

  STOP SLAVE[FOR CHANNEL 'channel'];

  CHANGE MASTER TO MASTER_AUTO_POSITION=1 [FOR CHANNEL 'channel'];

  START SLAVE [FOR CHANNEL 'channel'];

在线取消 GTID事务,改为BinLog:

1.为每个Slave执行下面的:

STOP SLAVE [FOR CHANNEL 'channel'];
CHANGE MASTER TO MASTER_AUTO_POSITION = 0, MASTER_LOG_FILE = file, 
MASTER_LOG_POS = position [FOR CHANNEL 'channel'];
START SLAVE [FOR CHANNEL 'channel'];
2.在每个Server上:SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;

3.在每个Server上:SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;

4.在每个server上,Check 直到@@GLOBAL.GTID_OWNED为空。

5.等待所有事务都被复制到所有Slave上。确认方法同上。

6.在每个Server上,执行SET @@GLOBAL.GTID_MODE=OFF;

7.在每个Server上,配置 gtid_mode=OFF,

如果想设enforce_gtid_consistency=OFF,也要在配置中加上。

 

原文地址:https://www.cnblogs.com/itdev/p/6021598.html