在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 可简化切换流程,适合生产环境使用。
