
1. MySQL 主从复制原理
MySQL 主从复制(Replication)通过主库 Binlog、从库 I/O 线程和 SQL 线程,实现数据同步。
MySQL A(主库)
|
| Binlog
↓
MySQL B(从库)
|
├── IO线程:接收主库Binlog
├── Relay Log:存储接收到的日志
└── SQL线程:应用日志中的事务
核心原则:主从复制的暂停、恢复、清理命令,通常都在从库执行。
2. 主从复制常用命令
以下以 MySQL 8.0.22 及以上版本为例。
| 操作 | SQL命令 | 执行位置 |
|---|---|---|
| 查看复制状态 | SHOW REPLICA STATUS\G |
从库 |
| 暂停复制 | STOP REPLICA; |
从库 |
| 恢复复制 | START REPLICA; |
从库 |
| 停止IO线程 | STOP REPLICA IO_THREAD; |
从库 |
| 停止SQL线程 | STOP REPLICA SQL_THREAD; |
从库 |
| 重置复制状态 | RESET REPLICA; |
从库 |
| 清除复制连接关系 | RESET REPLICA ALL; |
从库 |
2.1 暂停主从复制
STOP REPLICA;
作用:
-
停止从库 I/O 和 SQL 复制线程。
-
保留原有主从复制配置。
-
不删除已有业务数据。
恢复复制:
START REPLICA;
恢复后检查:
SHOW REPLICA STATUS\G
正常运行时,重点关注:
参数 正常值 含义
Replica_IO_Running Yes 从库正常连接主库并接收 Binlog
Replica_SQL_Running Yes 从库正常执行 Relay Log
Seconds_Behind_Source 0(理想) 复制延迟参考值,越小越好
Last_IO_Errno 0 没有记录到导致 IO 线程停止的错误
Last_SQL_Errno 0 没有记录到导致 SQL 线程停止的错误
同时检查 Last_IO_Error、Last_SQL_Error 和复制延迟。
2.2 重置主从复制状态
-- 先停止复制
STOP REPLICA;
-- 重置复制状态
RESET REPLICA;
作用:
-
删除 Relay Log(中继日志)。
-
重置复制位点和相关复制元数据。
-
保留主库连接参数。
-
不直接删除已有业务表数据。
-
不清除 GTID 已执行历史。
注意:该命令会删除尚未应用完成的 Relay Log,不可当作普通日志清理命令使用。 重建复制前必须重新确认数据一致性和同步位置。
2.3 清除主从复制关系
STOP REPLICA;
RESET REPLICA ALL;
作用:
-
停止并清除当前从库的复制配置。
-
删除 Relay Log。
-
清除主库地址、复制用户等连接信息。
-
不直接删除原有普通业务数据。
执行后可检查:
SHOW REPLICA STATUS\G
普通单通道复制配置被完全清除后,通常返回:
Empty set
注意: RESET REPLICA ALL****属于高风险配置清理操作,仅适用于经过审批的复制解除或重建场景。
3. 双向复制在哪个节点执行?
假设 MySQL A 和 MySQL B 配置了双向复制:
MySQL A ←────→ MySQL B
双向复制
| 操作目标 | 执行节点 |
|---|---|
| 暂停 A → B 复制 | B |
| 恢复 A → B 复制 | B |
| 清除 B 接收 A 的复制配置 | B |
| 暂停 B → A 复制 | A |
| 恢复 B → A 复制 | A |
| 清除 A 接收 B 的复制配置 | A |
因为在双向复制中,两台服务器同时承担对方的 Replica 角色。
特别注意:如果存在多个复制通道,必须先确认通道名称,使用 FOR CHANNEL 指定操作对象,避免误操作其他复制链路。
4. MySQL 5.7 与 8.0 命令对照
| MySQL 5.7 | MySQL 8.0.22+ |
|---|---|
SHOW SLAVE STATUS\G |
SHOW REPLICA STATUS\G |
STOP SLAVE; |
STOP REPLICA; |
START SLAVE; |
START REPLICA; |
RESET SLAVE; |
RESET REPLICA; |
RESET SLAVE ALL; |
RESET REPLICA ALL; |
MySQL 8.0.22 起推荐采用 REPLICA 相关命令。
5. 生产环境注意事项
-
执行命令前先确认当前节点、主从拓扑及 MySQL 版本。
-
暂停复制可能造成主从延迟扩大,需关注主库 Binlog 保留周期。
-
清理复制配置前,必须备份配置、核对 GTID 或 Binlog 位点。
-
RESET REPLICA ALL不会清除 GTID 已执行历史。 -
不要将
RESET MASTER或RESET BINARY LOGS AND GTIDS当作普通的解除主从命令。 -
暂停复制后还应关注 MySQL 重启时是否自动启动复制线程。
6. 总结
MySQL 主从管理记住四句话:
-
暂停复制:
STOP REPLICA -
恢复复制:
START REPLICA -
重置复制状态:
RESET REPLICA -
清除复制连接:
RESET REPLICA ALL
最重要的一点:谁接收复制,谁就负责执行对应的复制管理命令。
官方参考资料: