mysql如何启动和停止主从复制_启动流程说明

2次阅读

确认主从复制状态需执行show slave statusg,重点检查slave_io_running和slave_sql_running是否均为yes;任一为no即中断。启动用start slave(或指定线程),停止用stop slave(或指定线程),彻底清理用reset slave all。

mysql如何启动和停止主从复制_启动流程说明

如何确认主从复制当前状态

别急着启动或停止,先看它到底在不在跑。登录从库执行 SHOW SLAVE STATUSG,重点盯住两行:

  • Slave_IO_Running:是否正在拉取主库 binlog(应为 Yes
  • Slave_SQL_Running:是否正在回放中继日志(也应为 Yes

只要任一为 No,说明复制已中断——此时“启动”实际是“恢复”,而“停止”可能根本没必要操作。

启动复制:从 STOP 到 START 的关键路径

复制不是靠重启 mysql 服务来启停的,而是靠 SQL 命令控制两个独立线程。从库上执行:

  • START SLAVE; —— 最常用,同时启动 IO 和 SQL 线程
  • START SLAVE IO_THREAD; —— 只拉日志,不执行(适合补日志但暂不应用)
  • START SLAVE SQL_THREAD; —— 只执行 relay log,不拉新日志(适合追平积压)

执行后务必再查一次 SHOW SLAVE STATUSG,确认两个 Running 字段都变成 Yes,且 Seconds_Behind_Master 开始下降才表示真正动起来了。

停止复制:STOP SLAVE 的三种用法和陷阱

STOP SLAVE; 看似简单,但不同场景要选对子命令:

  • 临时维护(比如升级从库)→ 用 STOP SLAVE;,完整暂停,安全
  • 只暂停写入、保留中继日志供后续分析 → 用 STOP SLAVE SQL_THREAD;
  • 主库网络抖动,想缓存日志但不执行 → 用 STOP SLAVE IO_THREAD;

⚠️ 容易踩的坑:STOP SLAVE; 后如果直接改配置或删 relay log 文件,再 START SLAVE 可能报错 Could not find first log file name in binary log index file——因为 master.info 还记着旧位置,但文件已被清空。

彻底断开复制关系:RESET SLAVE ALL 是终极清理

如果明确不再恢复复制(比如拆集群、测试环境回收),不能只停线程,必须清元数据:

  • RESET SLAVE ALL;(MySQL 5.7+ 推荐)→ 彻底删除 master.inforelay-log.info、所有 relay log 文件,SHOW SLAVE STATUS 返回空结果
  • RESET SLAVE;(旧版本兼容)→ 仅清空内存状态,保留 relay log 文件和 info 文件,重启 MySQL 后可能自动重连主库

注意:RESET MASTER 是主库命令,会清空所有 binlog,影响其他从库或备份策略,从库上绝对不要执行。

text=ZqhQzanResources