简单概括主库上 Executed_Gtid_Set 是什么时候更新的

主库 上,Executed_Gtid_Set 是在本地事务 commit 成功后 才更新到 @@GLOBAL.gtid_executed 里的,不是"binlog 刚写完"就对外可见。

按主库事务链路看:

  1. 事务执行
  2. 分配 GTID
  3. commit 阶段写 binlog,Gtid_log_event 写在事务事件前面
  4. binlog 持久化
  5. 存储引擎提交成功
  6. GTID 加入主库的 @@GLOBAL.gtid_executed
  7. SHOW MASTER STATUS / SHOW REPLICA STATUS 看到的 Executed_Gtid_Set 才包含它

结合半同步:

  • after_sync 下,主库是 binlog 已刷盘、事务已发给从库并等 ACK 后,才提交存储引擎 。所以在等待 ACK 的阶段,这个事务虽然已经在主库 binlog 里,也可能已经在从库 relay log 里,但主库本地还没 commit,理论上还不应该出现在主库 Executed_Gtid_Set
  • after_commit 下,主库先提交存储引擎,再等从库 ACK;因此主库 commit 完后,Executed_Gtid_Set 很快会包含该 GTID,即使半同步 ACK 还没回来。

一句话:主库的 Executed_Gtid_Set 表示"主库已经提交过的 GTID",不是"主库 binlog 已写过的 GTID",也不是"从库已收到的 GTID"。

另一个细节:mysql.gtid_executed 表和 @@GLOBAL.gtid_executed 不完全等价。主库开启 binlog 时,完整实时状态看 @@GLOBAL.gtid_executed / SHOW MASTER STATUS,不要只看 mysql.gtid_executed 表;表里的内容可能要到 binlog rotate、shutdown,或特定版本/引擎路径下才补齐。

相关推荐
gwf2163 小时前
磨损均衡算法(Wear Leveling)——SSD如何让每块闪存“公平退休“?
运维·数据库·人工智能·python·嵌入式硬件·算法·智能硬件
AAA@峥3 小时前
CentOS7 源码编译安装 MySQL5.7|SQL 基础操作 + 备份恢复完整实战
运维·数据库·sql·centos
xixingzhe23 小时前
spring ai简单使用skills
数据库·人工智能·spring
Fu2067213 小时前
数据库第三次作业
数据库
AI多Agent协作实战派4 小时前
AI多Agent协作系统实战(二十三):Agent读HEARTBEAT.md不读AGENTS.md——openclaw的文件加载之谜
前端·数据库·人工智能·uni-app
一嘴一个橘子4 小时前
MysqL 哪些情况适合创建索引
mysql
jun_bai4 小时前
postgresql数据库免安装版安装到windows系统
数据库·postgresql
weixin_538601974 小时前
智能体测开Day33
数据库·oracle
时间的拾荒人4 小时前
MySQL C语言连接 - 从入门到实战
android·c语言·mysql
番茄炒鸡蛋加糖4 小时前
Redis--Lua 脚本原子性与滑动窗口限流
数据库·redis·lua