
mysql> stop slave;
mysql> set GTID_NEXT=‘XXX:804312’;
mysql> begin;
mysql> commit;
mysql> set GTID_NEXT=‘AUTOMATIC’;
mysql> start slave;
使⽤以上⽅法多次跳过事务,但是仍旧报错在主键’411523’的位置,此时GTID已经是不同的
GTID了。
既然已经跳过了事务,报错还是不变呢?因为复制是以组提交的⽅式进⾏的,虽然GTID是不
同的,但是end_positon是⼀样的。
显然,⽅案⼀,并不适⽤这种情况。
⽅案⼆:设置sql_log_bin=0,在从库删除冲突数据后,开启主从复制
在排查的过程中,已经知道了只有15条数据在报错时间的时间发⽣修改,那么尝试将这些数据
都清除,然后依靠主从复制,将主库的信息传送到从库回放。
操作步骤:
set sql_log_bin=0;
delete from XXXXX where id='XXXX';
在我执⾏完删除15条数据的操作后,开启主从复制,出现新的报错:
ERROR:1032!Could not execute Updaterows event on table XX.XX; Can’t find record in
‘..’;the event’s master log mysql-bin.000033, endlog_pos 76641875
根据这⾥给出的内容,进⾏对应主库的binlog解析:
mysqlbinlog --no-defaults --base64-output=decode-rows -vv mysql-bin.000033>33.log
找到对应end_pos的位置:
评论