> 数据库 > MySQL >

Mysql开启GTID后遇到错误跳过方法

处理方法如下:

一:跳过错误

  这个GTID_NEXT的4,是在master 上正常执行的最大id + 1,即Executed_Gtid_Set里面master uuid执行过的最大值 3+ 1

STOP SLAVE ; #首先停止gtid复制
SET @@SESSION.GTID_NEXT= '8f9e146f-0a18-11e7-810a-0050568833c8:4' ; 设置当前下一个执行的事务Id
BEGIN; COMMIT; # 设置空事务,直接提交
SET @@session.gtid_next=automatic;; #恢复下一个事务号 
START SLAVE; # 继续开启事务

二,重置master跳过错误

手工调整SLAVE已清除的GTID列表GTID_PURGED,人为通知SLAVE哪些事务已经被清除了,后续可以忽略: 

STOP SLAVE;
RESET MASTER;
SET @@GLOBAL.GTID_PURGED = '00018601-1111-1111-1111-111111111123:1-2031';
START SLAVE;
#在slave 运行时刻 reset master 命令不被支持
#在GTID环境中,RESET MASTER会清除掉系统变量gtid_purged和gtid_executed的值

 

上面 gtid_next 的值 00018601-1111-1111-1111-111111111123:2030是个会话级变量。

  • uuid是 Retrieved_Gtid_Set 的uuid,一般是 Master_UUID 的值,但如果是级联复制(master -> slavel1 -> slave2),那么要找到出错事务最原先在哪执行的
  • trx_id(或叫position)是 master 上正常执行的最大id + 1,即Executed_Gtid_Set里面master uuid执行过的最大值 2030+ 1


(责任编辑:IT)