首页/数据/数据库速查/GTID 配置(gtid_mode 渐进切换)
主从复制与高可用53 条

GTID 配置(gtid_mode 渐进切换)

开启 GTID 不能一步到位:按 OFF → OFF_PERMISSIVE → ON_PERMISSIVE → ON 四步逐级切换,每步确认复制与业务无异常;同时强制 enforce_gtid_consistency=ON。

数据库速查数据更新于 2026-10-13

GTID 配置是什么

GTID 为每个事务分配全局唯一编号,从库按编号自动判断该事务是否已执行,不用再手工维护位点,重建从库和切换拓扑都更简单。开启不能一步到位:要按 OFF、OFF_PERMISSIVE、ON_PERMISSIVE、ON 四级逐级切换,每一步都确认复制与业务正常;同时把 enforce_gtid_consistency 打开并写入配置文件固化。

基本信息

切换顺序先 enforce_gtid_consistency,再 gtid_mode
四级状态OFF → OFF_PERMISSIVE → ON_PERMISSIVE → ON
匿名事务切换前必须消化完,GTID 无法承载匿名事务
固化配置写入 my.cnf,防止重启后回退
关键变量gtid_executed / gtid_purged / gtid_mode

典型使用场景

  • 新搭主从:建议一开始就用 GTID,省去位点维护
  • 存量实例开启:按四级渐进切换并逐级观察
  • 从库重建:用备份加 gtid_purged 设置起始位置
  • 故障切换:新主选 gtid_executed 最完整的节点
  • 拓扑核对:比较各节点 gtid_executed 是否是超集关系
  • 中间件兼容性确认:MHA 或代理层都要支持 GTID 才能全量开启

渐进切换与核对

渐进切换与核对
SET @@GLOBAL.enforce_gtid_consistency = WARN;   -- 先告警观察是否有不兼容语句
SET @@GLOBAL.enforce_gtid_consistency = ON;
SET @@GLOBAL.gtid_mode = OFF_PERMISSIVE;        -- 允许匿名与 GTID 事务共存
SET @@GLOBAL.gtid_mode = ON_PERMISSIVE;
SELECT @@GLOBAL.gtid_mode;
-- 等待所有从库不再产生匿名事务后:
SET @@GLOBAL.gtid_mode = ON;
SELECT @@GLOBAL.gtid_executed;                  -- 各节点核对进度与超集关系
SELECT @@GLOBAL.gtid_purged;                    -- 用备份重建从库时设置它
-- 完成后写进 my.cnf 固化:gtid_mode = ON / enforce_gtid_consistency = ON

四级状态含义

状态匿名事务GTID 事务
OFF允许不允许
OFF_PERMISSIVE允许允许
ON_PERMISSIVE允许但告警允许
ON不允许允许
拓扑内所有节点(含 MHA 与中间件)都要支持 GTID 再全量开启。
ON_PERMISSIVE 阶段是过渡态:此时仍允许匿名事务写入,若停留在这一级就切换主库或重建从库,容易出现位点对不齐的问题,应尽快推进到 ON 并固化配置。
各节点的 gtid_executed 之间应为相等或超集关系;发现某个节点缺少事务时不要手工修改 gtid_purged 掩盖问题,正确做法是用备份重建从库并核对 gtid_purged 的取值。
切换前把每一级命令与验证步骤写成脚本并按序执行:手工敲错一步就可能停在中间状态,回退与排查成本远高于提前准备一份可复用的切换脚本。

易错点

  • 直接 SET gtid_mode=ON 跨级切换,实例报错甚至无法启动
  • 忘记把 gtid_mode 写进配置文件,重启后回退到 OFF 导致复制中断
  • 中间件或旧版工具仍产生匿名事务时推进到 ON,事务直接被拒
  • 重建从库时未设置 gtid_purged,重复回放已执行的事务报错
  • 切换过程中没有逐级验证复制状态,问题在完成切换后才暴露

数据来源与参考

  • MySQL 8.0 Reference Manual: Setting Up Replication Using GTIDs

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌