讲师中心 微信公众号
AI工具推荐 视频效率加速

MySQL如何快速跳过指定的GTID事务_注入空事务与SET gtid_next

千芳君_8135

千芳君_8135

发布时间:2026-03-13 19:55:31

|

375人浏览过

|

来源于php中文网

原创

精准跳过GTID事务需三步:STOP SLAVE → SET GTID_NEXT='xxx:nnn' → BEGIN; COMMIT;必须确认该事务可丢弃,否则引发数据不一致,且不可用sql_slave_skip_counter。

mysql如何快速跳过指定的gtid事务_注入空事务与set gtid_next

跳过一个报错的GTID事务:先确认位置再注入空事务

MySQL复制中断在GTID模式下,常见错误是 Could not execute Write_rows event on table 或 Slave has retried X times,根本原因是主从间某个事务无法执行,但又不能跳过整个relay log——必须精准跳过那个GTID。

关键不是“怎么跳”,而是“跳之前必须确认它确实该跳”:比如该事务在从库已存在、或主库上早已被回滚、或业务侧确认可丢弃。盲目跳过会引发数据不一致。

  • 先查报错时的GTID:SHOW SLAVE STATUS\G,看 Retrieved_Gtid_Set 和 Executed_Gtid_Set 的差集,再结合 Seconds_Behind_Master: NULL 和 SQL_Delay: 0 确认卡点
  • 用 SELECT * FROM performance_schema.replication_applier_status_by_coordinator; 查当前正在重放哪个 GTID
  • 别直接 SET GTID_NEXT —— 必须先 STOP SLAVE,且确保 slave_parallel_workers = 0(否则多线程下 GTID_NEXT 行为不可控)

SET gtid_next = 'xxx-yyy-zzz:123' 后必须立刻提交

SET GTID_NEXT 不是配置项,而是一次性会话级指令,它的作用只是“告诉MySQL:接下来这条语句,强制打上这个GTID”。它本身不产生事务,也不改变复制状态——你得手动补一条空事务让它落地。

漏掉 COMMIT 是最常踩的坑:设完 GTID_NEXT 就 START SLAVE,结果MySQL发现没有对应事务,直接报错 ERROR 1840 (HY000): @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty 或卡死在 Waiting for master to send event。

  • 正确顺序只有三步:STOP SLAVE → SET GTID_NEXT = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee:123'; → BEGIN; COMMIT;
  • BEGIN; COMMIT; 是必须的,CREATE TABLE t1(id INT); DROP TABLE t1; 这类操作也行,但别用 DDL(某些版本对DDL的GTID处理有边界问题)
  • 设完立刻 SELECT @@GTID_NEXT; 确认值没被自动重置(比如误连了其他会话)

注入空事务后,Executed_Gtid_Set 不会自动更新?

注入成功后,SHOW SLAVE STATUS\G 里的 Executed_Gtid_Set 看起来没变,这是正常现象。MySQL只在真正执行relay log里的事务时才更新它;你手工注入的事务属于“外部写入”,不会触发复制状态机的自动推进。

真正要看的是:SELECT GTID_SUBTRACT('aaa-bbb-ccc:1-123', @@global.gtid_executed); 返回空集合,说明该GTID已被包含;同时 START SLAVE 后不再报那个GTID的错,才代表跳过生效。

  • 别依赖 Executed_Gtid_Set 字符串长度或末尾数字判断是否成功
  • 如果跳过后仍报错,大概率是 GTID_NEXT 值写错了(比如少了一位、用了小写uuid、冒号前后空格)——GTID校验严格,错一位就完全不匹配
  • 5.7.20+ 和 8.0.22+ 对 GTID_NEXT 的合法性检查更严,非法格式会直接拒绝设置,而不是静默失败

为什么不用 sql_slave_skip_counter?

因为开了GTID就不能用 sql_slave_skip_counter。MySQL会直接报错:ERROR 1794 (HY000): The slave is configured with MASTER_AUTO_POSITION = 1, but the master does not support GTID-based replication(即使主库支持,只要启用了 MASTER_AUTO_POSITION,这个变量就被禁用)。

本质是设计取舍:GTID要求“每个事务全球唯一可追溯”,跳过机制必须基于GTID本身,而非偏移量。想绕开只能临时关GTID(停主从、改配置、重启),但代价远高于注入空事务,且风险极高。

  • 不要试图在GTID模式下 SET GLOBAL sql_slave_skip_counter = 1 —— 它会静默失效,或者触发不可预知的复制断裂
  • 如果经常要跳事务,说明上游写入不规范(比如主库执行了非事务引擎表操作、或用了 CREATE TEMPORARY TABLE),该修的是源头,不是反复跳
  • 8.0.23+ 支持 STOP REPLICA UNTIL SQL_BEFORE_GTIDS = '...',但仍是辅助手段,不能替代精准注入

真正麻烦的从来不是那几条命令,而是确认“这个GTID到底能不能跳”——日志里没记录、业务没留痕、开发说“应该没问题”,这种时候注入空事务就是把不确定变成确定的错误。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2433

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

1459

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

875

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3432

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

5888

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

1259

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6151

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

5322

2023.08.14

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

60

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn