Carry の Blog Carry の Blog
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • OpenClaw
  • Hermes Agent
  • Claude Code
  • MySQL8-SOP手册
  • MySQL实战45讲学习笔记
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carry の Blog

好记性不如烂键盘
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • OpenClaw
  • Hermes Agent
  • Claude Code
  • MySQL8-SOP手册
  • MySQL实战45讲学习笔记
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • MySQL

    • MySQL 运维知识地图:从入门配置到高可用排障
    • MySQL8 配置文件 my.cnf 重要参数解读
    • MySQL 导出 CSV 中文乱码:字符集链路从头讲一遍
    • MySQL 角色管理
    • MySQL网络抓包审计
    • MySQL 性能压测:Sysbench 1.0 实战
    • MySQL Router 实现读写分离
    • Gh-ost重建表,清除表碎片率
    • MySQL MGR配合MySQL-router实现innodb-cluster
    • MySQL 快速分析binlog定位问题
    • MySQL执行计划分析
    • DBA常用SQL和命令整理备查
    • 单表数据同步方案选型:为什么不该用 mysqldump 做「实时同步」
    • MySQL的事务隔离级别
    • MySQL存储过程批量生成数据
    • MySQL insert on duplicate key update,replace into , insert ignore的理解
    • MySQL不同字符集之间的区别和选择
    • MySQL为什么有时候会选错索引
    • MySQL死锁问题
    • MySQL使用SQL语句查重去重
    • MySQLdump逻辑备份
    • MySQL 基于 GTID 主从复制:跳过异常事务的正确姿势
      • 1. 现象:主从复制因某条事务报错中断
      • 2. 定位:确认卡在哪个 GTID
      • 3. 跳过流程:五步
      • 4. 验证
      • 5. 坑
      • 6. 可复用要点
    • MySQL8快速克隆插件使用指南
    • MySQL8双1设置保障安全
    • MySQL锁
    • innodb cluster安装
    • OPTIMIZE TABLE 和 ANALYZE TABLE 的区别:用实测数据说话
    • MySQLReplicaSet 安装
    • 脚本实现MySQL ReplicaSet 高可用
    • MySQL 的 Left join、Right join 和 Inner join 的区别
  • Redis

  • Keydb

  • TiDB

  • MongoDB

  • Elasticsearch

  • Kafka

  • victoriametrics

  • BigData

  • Sqlserver

  • 数据库
  • MySQL
Carry の Blog
2022-08-07
目录

MySQL 基于 GTID 主从复制:跳过异常事务的正确姿势

版本说明

本文基于 MySQL 5.7/8.0 的 GTID 复制模式(gtid_mode=ON)验证,8.0 上命令语法未变。

# 1. 现象:主从复制因某条事务报错中断

开启了 GTID 复制的主从架构里,如果从库执行某个 GTID 事务时报错(比如主库上手动改过数据、从库唯一约束冲突、DDL 与业务写入冲突等),复制线程会直接停在这个事务上,show slave status\G 里能看到 Slave_SQL_Running: No 且 Last_Error 有具体报错信息,之后所有新的 binlog 事件都会被卡住,无法继续同步。

传统的基于文件位置(file:pos)复制可以用 sql_slave_skip_counter 跳过指定条数的事件;但 GTID 模式下这个命令不可用,必须用 GTID 专属的跳过方式——这也是排查 GTID 复制故障时最容易卡壳的地方。

# 2. 定位:确认卡在哪个 GTID

先在从库确认当前复制状态和报错:

mysql> show slave status\G
1

重点看 Retrieved_Gtid_Set(从库已经收到的 GTID 范围)和 Executed_Gtid_Set(已成功执行的 GTID 范围)——两者之间缺的那一段,就是卡住的事务。同时 Last_SQL_Error 会给出具体是哪条 SQL 报的什么错。

如果需要进一步确认这个事务在主库上的具体内容,可以在主库上按 binlog 文件和位置查看:

mysql> show binlog events in 'mysql-bin.000022' from 1814 limit 2\G
1

为什么要先看这一步而不是直接跳过:跳过 GTID 本质是"放弃同步这条变更",从库数据会因此和主库产生差异。生产环境操作前必须先确认这条事务到底改了什么、跳过之后数据差异是否可接受——如果差异不可接受,正确做法是手动在从库上补齐对应的数据变更,而不是简单跳过。

# 3. 跳过流程:五步

第一步,停止从库复制(跳过操作必须在复制线程停止的状态下进行):

mysql> STOP SLAVE;
1

第二步,在当前 session 里显式指定要跳过的 GTID:

mysql> SET @@SESSION.GTID_NEXT = 'a47892ad-e207-11e9-bd0d-5254003519fe:185';
1

GTID_NEXT 告诉 MySQL"下一个要执行的事务用这个 GTID 标识"——正常情况下这个值是自动生成的,这里手动指定,是为了让接下来的空事务顶替掉这个 GTID 的位置。

第三步,提交一个空事务,"用掉"这个 GTID:

mysql> BEGIN;
mysql> COMMIT;
1
2

这个空事务本身不做任何数据变更,但它会被记录为已经执行过的 GTID a47892ad-...:185——相当于告诉复制系统"这个事务已经处理完了,不用再重放"。

第四步,把 session 恢复成自动生成 GTID 的模式:

mysql> SET SESSION GTID_NEXT = AUTOMATIC;
1

不恢复这一步,当前 session 后续所有操作都会尝试复用同一个 GTID,导致新的报错。

第五步,重新启动复制:

mysql> START SLAVE;
1

# 4. 验证

mysql> show slave status\G
1

确认 Slave_IO_Running 和 Slave_SQL_Running 都变回 Yes,且 Seconds_Behind_Master 开始正常追赶(不再停滞或报错)。如果后续又跳到下一个 GTID 报错,说明这批变更里有连续多个冲突事务,需要重复本流程或考虑更彻底的数据核对。

# 5. 坑

  • 跳过 GTID 会造成主从数据不一致——这是"止血"手段,不是"治病"。跳过之后强烈建议用 pt-table-checksum 之类工具核对主从数据差异,必要时手动补数据。
  • 如果同一批次有连续多个 GTID 都需要跳过,可以用一个 GTID 范围一次性指定(GTID_NEXT 只接受单个 GTID,连续多个需要循环执行本流程,或使用 sql_slave_skip_counter 的 GTID 等价方案批量处理)。
  • 跳过前一定要先看清楚 Last_SQL_Error 的报错原因——如果是主库误操作导致的持续性问题(比如某张表结构一直不一致),单纯跳过治标不治本,后面还会反复卡住同一类事务,需要从根源修复。

# 6. 可复用要点

  1. GTID 模式下跳过异常事务不能用传统的 sql_slave_skip_counter,必须走"设置 GTID_NEXT + 提交空事务"这套流程。
  2. 跳过前先确认这条事务改了什么、数据差异是否可接受,跳过是有代价的操作,不是无损修复。
  3. 跳过后务必核对主从数据一致性,必要时用工具做全量校验并补数据。
#MySQL
上次更新: 7/29/2026

← MySQLdump逻辑备份 MySQL8快速克隆插件使用指南→

最近更新
01
Nginx 运维知识地图:从配置基础到反向代理实战 原创
07-29
02
MySQL 运维知识地图:从入门配置到高可用排障 原创
07-29
03
单表数据同步方案选型:为什么不该用 mysqldump 做「实时同步」 原创
07-29
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式