能跑通GTID主从复制需三步:主从均设gtid_mode=ON和enforce_gtid_consistency=ON;主库创建mysql_native_password认证的复制用户;从库用SOURCE_AUTO_POSITION=1启动复制。

能跑通 GTID 主从复制,核心就三步:主从都开 gtid_mode=ON 和 enforce_gtid_consistency=ON,主库建 mysql_native_password 认证的复制用户,从库用 CHANGE REPLICATION SOURCE TO ... SOURCE_AUTO_POSITION=1 启动复制——漏掉任何一步,SHOW REPLICA STATUS\G 必然报错。
确认 GTID 真正启用(主从都要查)
MySQL 8.0 默认 gtid_mode 可能是 OFF 或 ON_PERMISSIVE,不能只看版本。必须进 MySQL 执行:
SELECT @@gtid_mode, @@enforce_gtid_consistency;
两个值都必须是 ON。常见错误包括:
- 只改了
my.cnf但没重启 MySQL(systemctl restart mysqld) - 漏配
enforce_gtid_consistency=ON,导致后续CREATE USER或 DML 报错 “GTID consistency violated” - 想直接设
gtid_mode=ON,但 MySQL 要求按顺序切换:OFF_PERMISSIVE → ON_PERMISSIVE → ON,否则报错
创建能连通的复制用户(主库执行)
MySQL 8.0 默认认证插件是 caching_sha2_password,但从库 IO 线程不支持它,会卡在 Plugin caching_sha2_password could not be loaded。
必须显式指定 mysql_native_password:
CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'ReplPass123!';<br>GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';<br>FLUSH PRIVILEGES;
注意点:
- 不能复用
root或其他已有用户,权限模型和认证插件会冲突 -
@'%'必须写全,不能省略;若只写@'localhost',从库连不上 - 密码需满足
validate_password策略(大小写字母 + 数字 + 符号),否则创建失败
重置从库 UUID 和复制状态(关键易错步)
克隆虚拟机或复制数据目录后,/var/lib/mysql/auto.cnf 中的 server_uuid 会重复,导致 GTID 冲突、SQL 线程拒绝执行。
安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。
必须手动清理:
- 停复制:
STOP REPLICA; - 清空旧状态:
RESET REPLICA ALL;(MySQL 8.0.23+ 推荐,清空master.info和relay-log.info) - 删 UUID 文件:
rm -f /var/lib/mysql/auto.cnf,再重启 MySQL,让它自动生成新server_uuid - 确认:
SELECT @@server_uuid;,主从必须不一致
跳过 RESET REPLICA ALL 直接 START REPLICA,大概率报 Could not initialize the source connection 或 SQL 线程卡在 Retrieved_Gtid_Set 不变。
配置并启动 GTID 复制(从库执行)
确保从库 my.cnf 已设唯一 server-id(非 0)、gtid_mode=ON、enforce_gtid_consistency=ON,然后执行:
CHANGE REPLICATION SOURCE TO<br> SOURCE_HOST='192.168.1.100',<br> SOURCE_USER='repl',<br> SOURCE_PASSWORD='ReplPass123!',<br> SOURCE_AUTO_POSITION=1;<br>START REPLICA;
验证是否正常:
-
SHOW REPLICA STATUS\G中Replica_IO_Running和Replica_SQL_Running都为Yes -
Retrieved_Gtid_Set和Executed_Gtid_Set应持续增长且最终一致 - 主库写入事务后,从库对应表数据应实时同步
最容易被忽略的是 auto.cnf 文件残留和认证插件不匹配——这两个问题不会报明显错误,但复制永远起不来。










