MySQL 8.0 双主同步必须启用 GTID 模式并严格配置 server-id 唯一、log_slave_updates=ON、enforce_gtid_consistency=ON、auto_increment_increment/offset 成对设置,且需清除复用镜像导致的 auto.cnf 冲突。

MySQL 8.0 双向主主(即双主)同步必须用 GTID,否则无法安全处理冲突和位置回退;但 GTID 模式下双主不是“开箱即用”,稍有疏漏就会导致 Slave_SQL_Running: No 或 Could not execute Write_rows event on table 类错误。
server-id 和 auto.cnf 必须唯一且不可复用
复制虚拟机镜像后,两台 MySQL 的 auto.cnf 文件内容(尤其是 server-uuid)会完全一致,这是双主同步失败最常见原因——MySQL 认为这是同一实例在循环同步自己。
- 每台机器执行:
rm -f /var/lib/mysql/auto.cnf,然后重启 mysqld,让其自动生成新 UUID -
server-id必须互不相同(如主1设为1,主2设为2),不能都是1或留空 - 检查是否生效:
mysql -e "show variables like 'server_id'; show variables like 'server_uuid';"
GTID 相关参数必须严格配对开启
只写 gtid-mode=on 不够,enforce-gtid-consistency 和 log-slave-updates 缺一不可,否则 CHANGE MASTER TO ... MASTER_AUTO_POSITION = 1 会报错或同步中断。
- 两台都必须配置(my.cnf 中
[mysqld]段):gtid_mode = ONenforce_gtid_consistency = ONlog_slave_updates = ON -
log-bin也必须开启(哪怕只是主库角色,从库也要写 binlog 才能反向同步) - 重启前用
mysqld --defaults-file=/etc/my.cnf --validate-config验证配置语法,避免因拼写错误(如enforce-gtid-consistency写成enforce_gtid_consistency)导致服务起不来
change master to 必须用 MASTER_AUTO_POSITION = 1
GTID 模式下禁止使用 MASTER_LOG_FILE 和 MASTER_LOG_POS,否则会绕过 GTID 校验,后续容易出现事务跳过或重复执行。
- 主1 同步主2:
CHANGE MASTER TO MASTER_HOST='192.168.25.150', MASTER_USER='repl', MASTER_PASSWORD='123456', MASTER_PORT=3306, MASTER_AUTO_POSITION = 1; - 主2 同步主1:
CHANGE MASTER TO MASTER_HOST='192.168.25.149', MASTER_USER='repl', MASTER_PASSWORD='123456', MASTER_PORT=3306, MASTER_AUTO_POSITION = 1; - 执行前确认复制账号已存在且权限正确:
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';(注意不是replication client)
启动后必须逐项验证状态,不能只看 Yes/No
SHOW SLAVE STATUS\G 输出里,Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 是基本门槛,但真正决定双主是否可用的是 GTID 集合是否对齐、是否有延迟或跳过。
- 重点看:
Retrieved_Gtid_Set(已拉取的 GTID)、Executed_Gtid_Set(已执行的 GTID),两者应一致或后者包含前者 - 若出现
Seconds_Behind_Master: NULL,说明 SQL 线程卡住,大概率是主键冲突或 DDL 不兼容,需查Last_SQL_Error - 测试双向写入:在主1建表插入一行,立刻在主2查;再在主2删该行,回主1查是否消失——仅靠
START SLAVE不代表数据真通
双主最隐蔽的风险不是同步断开,而是两个节点同时写入同一张表的同一主键,MySQL 不会自动合并或提示,而是直接报错中断 SQL 线程,且默认不记录到 error log。务必在业务层做写请求路由隔离,或者用 INSERT ... ON DUPLICATE KEY UPDATE 等幂等逻辑兜底。


















