mysql8主从复制主从切换(switchover)
2026-08-15调换主从复制的主从身份。
原本家用小主机作为主库,云主机作为从库,但是考虑到小主机可能有关机停电等风险,顾切换云主机为主,小主机为从。如果后续更换云厂商的话,重新更换新的云主机为主即可。
当前:
- A = Master
- B = Slave
目标:
- B = Master
- A = Slave
1. 确认从库已经追平
B上(原 Slave):
SHOW SLAVE STATUS;
-- 确保是0
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
2. 停止业务写入
先停止应用。
否则切换过程中:
A 还有新的写入,B 没同步完,会丢数据。
3. 在 B 上停止复制
STOP REPLICA;
查看当前复制点:
SHOW MASTER STATUS;
记录 File 和 Position
- binlog.000224 1721787
4. 把 B 设置成新主库
/etc/mysql/mysql.conf.d/ mysqld.cnf
server-id=2
# enable bin log
log-bin=bin-log
# which database will be replication (default is all)
#binlog-do-db=qiudong
binlog-do-db=lcxm_backend
# 2592000 = 30days
binlog_expire_logs_seconds=2592000
binlog_format=MIXED
重启:systemctl restart mysql
SHOW MASTER STATUS;
- bin-log.000001 157
5. 清理 B 的只读状态
如果有read-only, 可以去掉
SHOW VARIABLES LIKE 'read_only';
#[可选] 0(默认)表示读写(主机),1表示只读(从机)
#read-only=0
6. 配置 A 作为 B 的从库
此时也可以按需关闭到A的bin-log
停止原来的主库状态:RESET MASTER;
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='B的IP',
SOURCE_USER='repl',
SOURCE_PASSWORD='密码',
SOURCE_LOG_FILE='bin-log.000001',
SOURCE_LOG_POS=157;
启动: START REPLICA;
SHOW SLAVE STATUS;
Master_Host: B
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
测试略。
GitHub 登录
Gitee 登录
QQ 登录