https://yq.aliyun.com/articles/155827?spm=5176.8067842.tagmain.6.RFPTAL

MySQL 传统的主从复制方式使用 master_log_files 和 master_log_pos 两个参数来确定复制位点。当出现复制错误时,可以设置跳过出错的事务来恢复同步,MySQL 提供了 sql_slave_skip_counter 参数来实现此功能。使用方法如下:

root@(none) >stop slave;
Query OK, 0 rows affected (0.00 sec) root@(none) >SET GLOBAL SQL_SLAVE_SKIP_COUNTER = N; #跳过N个事务
Query OK, 0 rows affected (0.00 sec) root@(none) >start slave;
Query OK, 0 rows affected, 1 warning (0.03 sec)

如果使用 GTID 的主从复制方式,上面这种方法并不会生效。如果有同学做过尝试,应该会收到如下报错信息。

ERROR 1858 (HY000): sql_slave_skip_counter can not be set when the server is running with @@GLOBAL.GTID_MODE = ON. Instead, for each transaction that you want to skip, generate an empty transaction with the same GTID as the transaction

在 GTID 模式下使用 sql_slave_skip_counter 参数将会引发错误:

root@(none) >stop slave;
Query OK, 0 rows affected (0.00 sec) root@(none) >set global sql_slave_skip_counter = 1;
ERROR 1858 (HY000): sql_slave_skip_counter can not be set when the server is running with @@GLOBAL.GTID_MODE = ON. Instead, for each transaction that you want to skip, generate an empty transaction with the same GTID as the transaction

那使用 GTID 复制的数据库出现复制错误时该如何处理呢?其实上面的报错信息已经提示了解决方法:在发生错误的 GTID 事务号上插入一个空的事务,来实现跳过此复制错误的效果。

操作方法:

1 "show slave status\G" 找到发生复制错误的 GTID 事务号(示例只展示复制错误信息,其他信息省略),可以找到发生复制错误的 GTID 为:ab1b2733-2401-11e7-82fc-525400abbf4b:50

root@(none) >show slave status\G
1. row **
Last_Error: Worker 7 failed executing transaction 'ab1b2733-2401-11e7-82fc-525400abbf4b:50' at master log mysql-bin.000012, end_log_pos 156045; Could not execute Delete_rows_v1 event on table test.test2; Can't find record in 'test2', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log FIRST, end_log_pos 156045

2 向上面找到的 GTID 插入一个空的事务

stop slave;                 # 关闭 slave 复制
SET GTID_NEXT='$GTID_NO'; # 设置 GTID_NEXT 为复制出错的 GTID_NO
begin; commit; # 向 $GTID_NO 写入空事务
SET GTID_NEXT="AUTOMATIC"; # 重新设置 GTID_NEXT 为自动获取
start slave; # 启动 slave 复制

示例:

root@(none) >stop slave;
Query OK, 0 rows affected (0.00 sec) root@(none) >SET GTID_NEXT='ab1b2733-2401-11e7-82fc-525400abbf4b:50';
Query OK, 0 rows affected (0.00 sec) root@(none) >begin;
Query OK, 0 rows affected (0.00 sec) root@(none) >commit;
Query OK, 0 rows affected (0.00 sec) root@(none) >SET GTID_NEXT="AUTOMATIC";
Query OK, 0 rows affected (0.00 sec) root@(none) >start slave;
Query OK, 0 rows affected, 1 warning (0.03 sec)

3 重要:数据订正

最新文章

  1. Swift: 在Swift中桥接OC文件(自己创建的类文件、第三方库文件)
  2. Android三种播放视频的方式
  3. svn学习笔记(2)操作----还原,重命名,冲突处理,权限配置等
  4. Java连接mysql数据库
  5. iOS - 语音云通讯
  6. tableview的cell点击和取消
  7. android程序的安装与卸载
  8. 暴力求解——最大乘积 Maximum Product,UVa 11059
  9. pongo英雄会-幸运数题解
  10. js面向对象学习笔记(二):工厂方式:封装函数
  11. Javascript学习一数据类型
  12. Dijkstra算法:任意两点间的最短路问题 路径还原
  13. pyCharm编辑器激活使用
  14. 海量交通大数据应用平台MTDAP_nchang的经验记录
  15. [Android相机]通过手机摄像头识别环境亮度(转)
  16. 不会 tsconfig | tslint 常遇到的问题
  17. Srping cloud Ribbon 自定义负载均衡
  18. python多重继承C3算法
  19. IP流量重放与pcap文件格式解析
  20. O(n)回文子串(Manacher)算法

热门文章

  1. Kafka实践
  2. 对于maven的一些命令
  3. centos 安装thrift
  4. 服务器安装wordpress,搭建自己的博客平台
  5. 纯C:url base64
  6. JSON JAVA 总结
  7. input标签(单选框和复选框)
  8. xdoj-1106(判断组合数是否溢出)
  9. Automatic Text Difficulty Classifier Assisting the Selection Of Adequate Reading Materials For European Portuguese Teaching --paper
  10. linux----别名