必须主从都设gtid_mode=on且enforce_gtid_consistency=on,缺一不可;只改配置不重启或漏配后者,复制必然卡在初始化阶段;需执行select @@gtid_mode, @@enforce_gtid_consistency验证二者均为on,否则create user等操作将报“gtid consistency violated”错误。

必须主从都设 gtid_mode=ON 且 enforce_gtid_consistency=ON,缺一不可;只改配置不重启、或漏配后者,复制必然卡在初始化阶段。
确认 GTID 参数已真正生效(不是只写进 my.cnf)
MySQL 8.0 默认 gtid_mode 可能是 OFF 或 ON_PERMISSIVE,光改配置文件没用。进 MySQL 执行:
SELECT @@gtid_mode, @@enforce_gtid_consistency;
两个值都必须是 ON。常见错误包括:
- 改完
/etc/my.cnf没执行systemctl restart mysqld - 只设了
gtid_mode=ON,但漏掉enforce_gtid_consistency=ON—— 后者不开启会导致CREATE USER、INSERT等操作直接报错 “GTID consistency violated” - 想在线切换
gtid_mode:必须按顺序执行SET GLOBAL GTID_MODE = OFF_PERMISSIVE→ON_PERMISSIVE→ON,中间不能跳步
主库 my.cnf 必须包含的最小 GTID 相关项
以下参数缺一不可,且顺序/拼写敏感(注意 MySQL 8.0+ 推荐用短横线写法):
-
server-id=1(主库设为 1,从库必须不同) -
log-bin=mysql-bin(必须开启 binlog,名称可自定义,但不能带路径) -
binlog-format=ROW(生产环境强制要求,SBR 在 GTID 下受限严重) -
gtid-mode=ON(注意配置文件里是短横线,SQL 里是下划线) enforce-gtid-consistency=ON-
log-slave-updates=1(多级从库或级联场景必需;单主从可选,但建议加上)
改完必须重启:systemctl restart mysqld,FLUSH PRIVILEGES 不起作用。
从库 server-id 和 server_uuid 冲突是 GTID 复制失败最常见原因
克隆虚拟机、备份恢复后,/var/lib/mysql/auto.cnf 文件里的 server_uuid 极大概率重复,导致从库 SQL 线程拒绝启动,报错类似 Could not initialize the source connection 或 Retrieved_Gtid_Set is empty。
正确清理步骤(顺序不能乱):
- 停复制:
STOP REPLICA; - 清空所有复制状态:
RESET REPLICA ALL;(MySQL 8.0.23+ 推荐,会删master.info和relay-log.info) - 删 UUID 文件:
rm -f /var/lib/mysql/auto.cnf - 重启 MySQL:
systemctl restart mysqld(让它自动生成新server_uuid) - 验证:
SELECT @@server_uuid, @@server_id;,确保主从不一致
CHANGE REPLICATION SOURCE TO 必须带 SOURCE_AUTO_POSITION=1
从库配置复制源时,不能用老式 MASTER_LOG_FILE/MASTER_LOG_POS,必须启用 GTID 自动定位:
CHANGE REPLICATION SOURCE TO SOURCE_HOST='10.0.0.1', SOURCE_USER='repl', SOURCE_PASSWORD='ReplPass123!', SOURCE_AUTO_POSITION=1;
关键点:
-
SOURCE_AUTO_POSITION=1是开关,漏写就退化成传统复制,GTID 形同虚设 - 用户名密码必须和主库上用
mysql_native_password创建的一致(caching_sha2_password会导致 IO 线程卡住) - 主库创建用户语句必须显式指定插件:
CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'ReplPass123!';
GTID 主从最脆弱的地方不在配置本身,而在 UUID 冲突和认证插件不匹配——这两处出问题,SHOW REPLICA STATUS\G 里几乎不会直接告诉你原因,得靠经验排查。











