RESET SLAVE ALL 是 MySQL 5.7 中最彻底的从库复制重置操作,它清除 master.info 和 relay-log.info 文件、所有 relay log、内存中全部连接参数(如 MASTER_HOST、MASTER_USER 等)及 MASTER_DELAY,但不修改 gtid_executed 或 gtid_purged;必须在 STOP SLAVE 后执行,否则报错。

直接说结论:在 MySQL 5.7 中,RESET SLAVE ALL 是重置从库复制关系最干净、最推荐的起点操作,但它必须在 STOP SLAVE 之后执行,否则会报错 ERROR 1197 (HY000): This operation cannot be performed with a running slave。
RESET SLAVE ALL 到底清除了什么
RESET SLAVE ALL 不只是删 relay log 和重置位置 —— 它是 MySQL 5.6.3+ 引入的“全量清除”指令,比 RESET SLAVE 更彻底:
- 删除
master.info和relay-log.info文件 - 清空所有 relay log 文件(并新建一个)
-
清除内存中保存的连接参数:包括
MASTER_HOST、MASTER_PORT、MASTER_USER、MASTER_PASSWORD、MASTER<em>SSL</em>*等 - 重置
MASTER_DELAY为 0 - 但不触碰 GTID 相关变量(
gtid_executed、gtid_purged不变)
⚠️ 常见误操作:只执行
RESET SLAVE后直接START SLAVE,结果仍连向旧主库 —— 因为连接参数还在内存里。这就是为什么必须用ALL版本。
执行前必须确认的 3 个状态
RESET SLAVE ALL 是破坏性操作,执行前务必检查:
-
SHOW SLAVE STATUS\G中Slave_IO_Running和Slave_SQL_Running都是Yes?→ 必须先STOP SLAVE - 从库是否启用了 GTID?→ 查
SELECT @@gtid_mode;;若为ON,后续CHANGE MASTER TO必须带MASTER_AUTO_POSITION = 1,不能指定MASTER_LOG_FILE/MASTER_LOG_POS - 是否有未应用完的 relay log?→ 看
Relay_Log_File和Relay_Log_Pos是否等于Relay_Master_Log_File和Exec_Master_Log_Pos;如果不等,说明还有 SQL 线程没追上,强制重置会导致数据丢失(除非你明确要丢弃这部分)
正确执行顺序(一步都不能跳)
按顺序执行以下命令(全部在从库上):
-
STOP SLAVE; -
RESET SLAVE ALL; -
CHANGE MASTER TO ...;(填入新主库信息,注意 GTID 模式下参数不同) -
START SLAVE; -
SHOW SLAVE STATUS\G确认Seconds_Behind_Master开始下降,且无LastError
示例(非 GTID 场景):
CHANGE MASTER TO MASTER_HOST='192.168.1.100', MASTER_USER='repl', MASTER_PASSWORD='xxx', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000012', MASTER_LOG_POS=1943;
示例(GTID 场景):
CHANGE MASTER TO MASTER_HOST='192.168.1.100', MASTER_USER='repl', MASTER_PASSWORD='xxx', MASTER_PORT=3306, MASTER_AUTO_POSITION = 1;
容易被忽略的兼容性细节
-
RESET SLAVE ALL在 MySQL 5.6.3+ 才可用;5.6.2 及更早版本只有RESET SLAVE,需手动删配置文件或重启 mysqld 才能清连接参数 - 如果从库开启了
log_slave_updates(即作为级联从库),RESET SLAVE ALL不影响该选项本身,但 relay log 清空后,它将不再有“上游 binlog 的中继内容”可写入自己的 binlog - 使用 mysqlpump 或 mysqldump 导入数据后重置复制,务必确保导入前主库已执行
RESET MASTER(尤其当 dump 包含 GTID 时),否则从库可能因 GTID 冲突卡住
重置不是万能解药 —— 它解决的是“配置错乱”,而不是“数据不一致”。如果从库表内容已经和主库对不上,RESET SLAVE ALL + CHANGE MASTER TO 只会让不一致继续同步下去。


















