gtid主从切换无需手动定位binlog位置,因事务自带唯一标识,从库通过gtid_executed和gtid_retrieved自动对齐;但需全局开启gtid、初始备份含gtid信息,并严格校验三组gtid状态值。

为什么主从切换时 GTID 能省掉找 binlog 位置这步
传统基于 FILE/POSITION 的主从切换,必须手动执行 SHOW MASTER STATUS 查新主库的 File 和 Position,再在从库用 CHANGE MASTER TO ... MASTER_LOG_FILE=..., MASTER_LOG_POS=... 对齐——稍有偏差就复制中断。而启用 GTID 后,每个事务自带唯一标识(source_id:transaction_id),从库靠 gtid_executed 和 gtid_retrieved 自动跳过已执行事务,无需人工定位偏移量。
前提是:所有节点都开启 gtid_mode=ON、enforce_gtid_consistency=ON,且初始搭建时就用 mysqldump --set-gtid-purged=ON 或 xtrabackup --slave-info 导出,否则 gtid_purged 不完整,切换后可能重复执行或跳过事务。
切换前必须验证的三个 GTID 状态值
执行切换前,先在候选新主库上检查这三个关键变量是否对齐:
-
SELECT @@global.gtid_executed;—— 已执行的所有事务集合,必须包含所有从库的Retrieved_Gtid_Set -
SELECT @@global.gtid_purged;—— 已被清理的 GTID 集合,不能比任何从库的Executed_Gtid_Set少,否则从库会报Cannot replicate because the master purged required binary logs -
SHOW SLAVE STATUS\G中的Retrieved_Gtid_Set和Executed_Gtid_Set—— 确保差集为空(即已追平)
若发现 gtid_purged 缺失,不能直接 SET GLOBAL gtid_purged = ... 补充(除非 gtid_executed 为空),否则会破坏一致性;应优先用 RESET MASTER + 全量重搭,或从备份恢复。
执行 CHANGE MASTER TO 时只设 MASTER_AUTO_POSITION=1
切换命令极简,但极易因多写参数导致失败:
STOP SLAVE; RESET SLAVE ALL; CHANGE MASTER TO MASTER_HOST='new-master-ip', MASTER_PORT=3306, MASTER_USER='repl', MASTER_PASSWORD='xxx', MASTER_AUTO_POSITION=1; START SLAVE;
注意:MASTER_LOG_FILE 和 MASTER_LOG_POS 绝对不能出现,否则 MySQL 会忽略 MASTER_AUTO_POSITION=1 并尝试按位置同步,大概率报错 Client requested master to start replication from position > file size。
如果从库之前是 FILE/POSITION 模式,切到 GTID 前必须先 STOP SLAVE; RESET SLAVE ALL; 清空旧位点信息,否则残留的 master_log_file 会干扰自动定位。
从库启动后卡在 Waiting for source to send event 怎么查
这不是网络问题,大概率是 GTID 集合不兼容:
- 用
SHOW SLAVE STATUS\G查Seconds_Behind_Master是否为NULL,同时看Slave_SQL_Running_State是否停在Waiting for source to send event - 查错误日志,典型报错:
The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires - 对比新主库的
gtid_purged和该从库的Executed_Gtid_Set,用SELECT GTID_SUBSET('a-b-c', 'a-b-c,d-e-f');判断是否包含;不包含就得重搭
真正麻烦的不是切换动作本身,而是切换前没确认所有节点的 gtid_purged 可达性——这个集合一旦丢失,只能重建从库,没有“热修复”办法。











