首页/数据/数据库速查/多源复制(Multi-Source)
主从复制与高可用53 条

多源复制(Multi-Source)

一个从库同时拉多个源:用于数据汇总、分库聚合场景;8.0 用 FOR CHANNEL 显式命名通道,通道级管理(START/STOP/状态分开看)。

数据库速查数据更新于 2026-10-13

多源复制是什么

多源复制让一个从库同时从多个源实例拉取数据,用于把多个分片汇总到中心库做报表或数仓前置。8.0 语法统一为 CHANGE REPLICATION SOURCE TO ... FOR CHANNEL '通道名',每条复制链路是一个独立通道:位点、线程状态、启停都按通道分开管理。前提是各个源的库表命名不冲突,且没有两个源同时写同一行数据——冲突设计属于架构问题,不是参数能解决的。

基本信息

建链语句CHANGE REPLICATION SOURCE TO ... FOR CHANNEL '名'(8.0)
启停START REPLICA FOR CHANNEL '名' / STOP REPLICA FOR CHANNEL '名'
状态查看SHOW REPLICA STATUS FOR CHANNEL '名';P_S 复制表按 CHANNEL_NAME 分组
自动位点SOURCE_AUTO_POSITION=1 基于 GTID,推荐与 GTID 一起使用
前提条件各源库表命名需隔离(不同库或统一前缀)

典型使用场景

  • 分片汇总:多个业务分片的数据汇总到一张中心报表库
  • 多租户归集:每个租户一个实例,汇总库统一做统计与对账
  • 机房合并:把多个小机房的实例数据收到中心节点后再做迁移
  • 报表前置:源库按业务拆开,汇总节点只承接分析型查询,避免压到生产库
  • 演练与灰度:新汇总架构上线前先并行拉取,比对与现有链路的结果

配置两个通道

配置两个通道
-- 通道 A:来自 10.0.0.10
CHANGE REPLICATION SOURCE TO
  SOURCE_HOST='10.0.0.10', SOURCE_USER='repl', SOURCE_PASSWORD='***',
  SOURCE_AUTO_POSITION=1 FOR CHANNEL 'ch_a';
-- 通道 B:来自 10.0.0.20
CHANGE REPLICATION SOURCE TO
  SOURCE_HOST='10.0.0.20', SOURCE_USER='repl', SOURCE_PASSWORD='***',
  SOURCE_AUTO_POSITION=1 FOR CHANNEL 'ch_b';
START REPLICA FOR CHANNEL 'ch_a';
START REPLICA FOR CHANNEL 'ch_b';
-- 按通道分别检查状态,别只看默认通道
SHOW REPLICA STATUS FOR CHANNEL 'ch_a'\G

通道状态关键字段

字段含义异常表现
Replica_IO_Running拉取线程是否运行No 说明连不上源或认证失败
Replica_SQL_Running回放线程是否运行No 通常是主键冲突或表不存在
Seconds_Behind_Source通道级延迟秒数持续增长说明回放跟不上
Last_SQL_Error最近一次回放错误冲突类错误需先解决数据问题
Channel_Name当前状态所属通道漏加 FOR CHANNEL 时查到的是默认通道
多源复制的每个通道都有独立的过滤规则与延迟;监控要按通道名分组,否则汇总一个平均值会把异常通道掩盖掉。
数据冲突是多源复制最常见的失败原因:主键或唯一键相同的两行从不同源重放过来时,第二个必然报错。选型阶段就要决定好是否加实例前缀列或分库隔离。

易错点

  • 两个源的同名表结构不同却直接拉取:回放报列不存在或类型不兼容,务必先统一 schema
  • 管理命令漏写 FOR CHANNEL:操作作用在默认通道上,命名通道毫无变化,排查时容易误判「命令没生效」
  • 以为多源复制能自动合并冲突:它不做冲突消解,冲突直接让回放线程停止,需要人工介入
  • 监控只看一个通道:单通道挂掉时整体延迟指标可能仍然好看,告警要按通道分别设置
  • 汇总库直接被报表用户直查:长查询与复制回放争抢资源,先做读写分离或加只读副本

数据来源与参考

  • MySQL 8.0 Reference Manual: Multi-Source Replication

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌