主从角色切换需确保数据一致,先检查主从状态,锁定原主库并记录binlog位置,将原从库提升为新主库并停止复制线程,配置原主库作为新从库指向新主库,启动复制后验证同步状态,避免双写冲突,建议低峰操作并使用MHA等工具自动化。

在MySQL主从复制环境中,有时需要将原来的主库变为从库,原来的从库提升为主库,这个过程称为“主从角色切换”。常见于主库故障、维护或高可用架构中。以下是实现MySQL主从角色切换的常用方法和步骤。
确认当前主从状态
切换前先检查主从复制是否正常运行:
- 在原主库上执行:SHOW MASTER STATUS; 查看当前二进制日志位置。
- 在原从库上执行:SHOW SLAVE STATUS\G 确认 SQL 和 IO 线程为 Yes,且无延迟(Seconds_Behind_Master 为 0)。
停止原主库写入并锁定数据
为保证数据一致性,需暂停应用对原主库的写操作:
- 执行 FLUSH TABLES WITH READ LOCK; 锁定所有表,防止写入。
- 记录此时的 binlog 文件名和位置(可再次运行 SHOW MASTER STATUS; 获取)。
将原从库提升为主库
确保原从库已追平主库数据后进行提升操作:
- 在原从库上执行:STOP SLAVE; 停止复制线程。
- 执行 RESET SLAVE ALL; 清除从库复制信息(MySQL 5.7+ 推荐使用 RESET SLAVE; 后再手动清理)。
- 解除只读模式(如设置了):SET GLOBAL read_only = OFF;
- 该从库现在可作为新的主库接受写请求。
配置原主库为新从库
原主库恢复后作为从库接入新主库:
- 在原主库上执行:UNLOCK TABLES; 解锁表。
- 设置为只读(可选):SET GLOBAL read_only = ON;
- 配置指向新主库的复制关系:
CHANGE MASTER TO
MASTER_HOST='new_master_ip',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='xxx',
MASTER_LOG_POS=xxx; - 启动复制:START SLAVE;
验证复制状态
切换完成后,务必检查新主从结构是否正常:
- 在新从库(原主库)上运行 SHOW SLAVE STATUS\G,确认两个线程正常运行。
- 在新主库插入测试数据,观察是否同步到从库。
基本上就这些。主从角色切换的关键是保证数据一致性,避免双主写入导致冲突。建议在低峰期操作,并提前备份关键数据。自动化工具如 MHA、Orchestrator 可简化切换流程,适合生产环境使用。










