MySQL主从切换需确保数据完整性,关键步骤包括:确认从库同步完成(Seconds_Behind_Master=0、IO/SQL线程正常、位点一致);主库锁表并记录精确位点;从库停复制、重置状态、启用binlog;旧主库配置为新主库的从库并验证同步。

MySQL主从切换要保证数据完整性,关键在于确保从库已完全同步、避免写入冲突、正确重置复制状态。不是简单停服务再换角色,而是围绕“数据一致”这个核心步步验证和操作。
确认从库已完全同步
这是切换的前提,跳过这步极易丢数据。
- 在从库执行
SHOW SLAVE STATUS\G,重点检查三项: - Seconds_Behind_Master = 0:表示没有延迟,已追平主库;
- Slave_IO_Running 和 Slave_SQL_Running 都为 Yes:说明IO线程和SQL线程都在正常工作;
- Exec_Master_Log_Pos 与主库的 Show Master Status 中的 Position 一致(尤其用传统 binlog position 方式时)。
暂停主库写入并获取精确位点
防止切换瞬间产生新数据而未被从库同步。
- 在主库执行:
FLUSH TABLES WITH READ LOCK;—— 锁住所有表,禁止写入; - 立即执行:
SHOW MASTER STATUS;—— 记下当前File和Position(GTID 模式下记下Executed_Gtid_Set); - 保持连接不退出,后续配置新从库时要用到这个位点。
将从库提升为新主库
清除旧复制状态,使其具备独立写入能力。
- 在原从库上执行:
STOP SLAVE; - 执行:
RESET SLAVE ALL;—— 清空所有复制元数据(包括 master.info、relay-log.info 等); - 可选但推荐:
FLUSH LOGS;生成新的 binlog 文件,便于后续定位; - 检查并确保该实例已启用
log_bin,且server-id唯一(不能和旧主库重复)。
把旧主库设为新主库的从库(可选但强烈建议)
恢复双节点复制链路,避免单点风险,同时验证数据一致性。
- 在旧主库上先执行:
STOP SLAVE;和RESET SLAVE ALL;; - 根据前面记录的位点(或 GTID),执行:
CHANGE MASTER TO MASTER_HOST='新主库IP', MASTER_USER='repl', MASTER_PASSWORD='xxx', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=123456;; - 启动复制:
START SLAVE;; - 再次
SHOW SLAVE STATUS\G确认同步正常,Seconds_Behind_Master = 0后才算闭环完成。
整个过程不复杂但容易忽略细节,尤其是锁表后未及时记录位点、或重置从库时漏掉 ALL 参数导致残留状态。只要每一步都验证到位,数据完整性就能切实保障。


















