STOP REPLICA 不加 FOR CHANNEL 会停止所有用户通道(除 group_replication_recovery 和 group_replication_applier),导致多源复制中非目标通道也被误停;必须显式指定通道名,如 STOP REPLICA FOR CHANNEL "source_a"。

多源复制下 STOP REPLICA 不加 FOR CHANNEL 会停掉所有通道
在 MySQL 8.0 多源复制环境中,STOP REPLICA 默认作用于所有已配置的通道(除 group_replication_recovery 和 group_replication_applier 这两个特殊通道外)。这意味着如果你只打算暂停某个主库的同步,却漏写了 FOR CHANNEL,结果是其他通道也一起停了——尤其是线上有多个数据源聚合时,容易误伤业务。
常见错误现象:SHOW REPLICA STATUS\G 显示多个通道的 Slave_IO_Running 都变成 No,但你只执行了一次 STOP REPLICA。
- 必须显式指定通道名:
STOP REPLICA FOR CHANNEL "source_a" - 通道名区分大小写,且需与
CHANGE REPLICATION SOURCE TO ... FOR CHANNEL "xxx"中定义的一致 - 若通道名含特殊字符或空格,要用双引号包裹(单引号在某些客户端可能被转义)
START REPLICA 启动指定通道时线程类型要配对
START REPLICA FOR CHANNEL "source_b" 默认同时启动 IO_THREAD 和 SQL_THREAD。但有时你只想先拉日志、暂不执行(比如准备做备份),就得拆开控制:
- 只拉日志不执行:
START REPLICA IO_THREAD FOR CHANNEL "source_b" - 只执行已有中继日志:
START REPLICA SQL_THREAD FOR CHANNEL "source_b" - 两个都启:
START REPLICA IO_THREAD, SQL_THREAD FOR CHANNEL "source_b"(等价于不写线程类型)
注意:如果只启 SQL_THREAD,而该通道的 relay log 已被清空或损坏,Slave_SQL_Running 会立刻变为 No,报错 Could not find first log file name in binary log index file —— 因为它找不到起始位置。
group_replication_* 通道不能用 START/STOP REPLICA 直接操作
MySQL 内部保留了两个组复制专用通道:group_replication_recovery 和 group_replication_applier。它们不由用户直接启停:
-
START REPLICA FOR CHANNEL "group_replication_recovery"→ 报错ER_MULTISOURCE_CHANNELS_NOT_ALLOWED(错误码 1964) -
STOP REPLICA FOR CHANNEL "group_replication_applier"→ 同样拒绝,除非事务已提交并完成旋转 - 这些通道由 Group Replication 插件自动管理,强行干预可能导致状态不一致
如果你看到 SHOW REPLICA STATUS 里有这两个通道,别碰它们的 START/STOP,只关注你自己定义的业务通道(如 "prod_db"、"log_analytics")。
检查通道状态时 SHOW REPLICA STATUS 默认不显示 group_replication_applier
SHOW REPLICA STATUS 在多通道环境下默认只列出用户创建的通道,**不会显示 group_replication_applier 的状态**——这点非常容易让人误判“是不是没生效”。实际它在后台静默运行,状态得查 performance_schema.replication_applier_status_by_coordinator 或 replication_group_members 表。
验证某通道是否真在跑,最可靠的方式是:
- 查具体通道:
SHOW REPLICA STATUS FOR CHANNEL "source_c"\G - 看关键字段:
Slave_IO_Running、Slave_SQL_Running、Seconds_Behind_Master - 不要依赖
SHOW REPLICA STATUS不带FOR CHANNEL的汇总输出来判断单个通道
通道名拼错、大小写不一致、或误以为默认命令能覆盖所有场景,是线上排查中最常卡住的三个点。


















