GTID 是什么
GTID(全局事务标识符)给每个已提交的事务分配一个全局唯一编号,形式是「源实例 UUID : 事务序号」。它的意义在于把复制位置从「文件名加偏移」变成「已执行到哪一批事务」,主库切换后从库不用再去猜新旧主库的文件对应关系。对 CDC 链路同样有价值:用 GTID 表达起点,重新接入时更容易对齐,也能天然起到去重作用——同一个 GTID 在目标端只会执行一次。
基本信息
| 格式 | server_uuid:事务序号,如 3f2b...:101 |
|---|---|
| 开启条件 | gtid_mode=ON 且 enforce_gtid_consistency=ON |
| 过渡步骤 | OFF → OFF_PERMISSIVE → ON_PERMISSIVE → ON |
| 优势 | 复制故障切换、位点表达与去重不依赖文件偏移 |
| 限制 | 需实例与工具都支持;部分语句在 GTID 模式下受限 |
| 查看方式 | SHOW VARIABLES、SELECT @@GLOBAL.gtid_executed |
查看 GTID 状态
查看 GTID 状态
SHOW VARIABLES LIKE 'gtid_mode';
SHOW VARIABLES LIKE 'enforce_gtid_consistency';
SELECT @@GLOBAL.gtid_executed; -- 已执行 GTID 集合
SHOW MASTER STATUS\G -- Executed_Gtid_Set 列
-- 8.4 起语句改名为:SHOW BINARY LOG STATUS\G典型使用场景
- 主从切换:切换后从库按 GTID 自动对齐,不用人工换算文件名与偏移
- CDC 起点表达:把起点记成 GTID 集合,重建链路时更稳定
- 链路核对:比对新旧实例的已执行集合,判断增量是否追平
- 多级复制:级联拓扑下用 GTID 判断事务是否已经执行过
- 审计与追溯:事务编号可以定位某次变更是何时被写入的
- 数据校验:对比源端与目标端的已执行集合,快速判断增量是否已经追平
关键变量读法
| 变量 | 含义 | 注意 |
|---|---|---|
| gtid_mode | GTID 启用状态 | 四步过渡期间有中间值 |
| enforce_gtid_consistency | 是否强制 GTID 一致性约束 | 必须先于 gtid_mode 开启 |
| gtid_executed | 已执行的事务集合 | 切换后可据此判断是否追平 |
| gtid_purged | 已被清理的事务集合 | 该范围内无法再回放 |
| server_uuid | 实例唯一标识 | 决定 GTID 前缀 |
GTID 过渡四步之间都要验证复制与业务,不要一步跳到 ON。
gtid_purged 记录的是已经无法回放的事务范围:如果采集端记录的起点落在里面,只能重新建立全量基线,不能指望继续增量。