能跑通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” - 若当前不是
ON,不能直接SET GLOBAL GTID_MODE = ON,需按顺序执行:OFF_PERMISSIVE → ON_PERMISSIVE → ON,且enforce_gtid_consistency必须在gtid_mode=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;
注意点:
安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。
- 不能复用
root或其他已有用户,权限模型和认证插件会冲突 -
@'%'要明确写,不能省略;若只写@'localhost',从库连不上 - 密码需含大小写字母+数字+符号,否则可能被
validate_password策略拒绝
从库重置 UUID 并配置自动定位
克隆或镜像部署后,/var/lib/mysql/auto.cnf 中的 server_uuid 会重复,导致 GTID 冲突、SQL 线程拒绝执行。必须手动清理:
- 停复制:
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;主从不一致
配置从库连接时,必须用 SOURCE_AUTO_POSITION=1:
CHANGE REPLICATION SOURCE TO<br> SOURCE_HOST='192.168.1.10',<br> SOURCE_USER='repl',<br> SOURCE_PASSWORD='ReplPass123!',<br> SOURCE_AUTO_POSITION=1;<br>START REPLICA;
为什么 SOURCE_AUTO_POSITION=1 不能省略?
这是 GTID 复制区别于传统模式的关键开关。不设它,从库仍按老方式尝试解析 MASTER_LOG_FILE 和 MASTER_LOG_POS,而 GTID 模式下这些字段已失效,必然报错 Could not initialize the source connection 或 Client requested master to start replication from position > file size。它让从库自动比对 @@global.gtid_executed 和主库的 Executed_Gtid_Set,跳过已执行事务,精准续同步。
最容易被忽略的是:克隆虚拟机后不删 auto.cnf,以及主库用户没强制指定 mysql_native_password——这两处问题占 GTID 同步失败案例的七成以上。

















