mysql 8.0多源复制仅支持多通道并行拉取与回放binlog,不自动汇总数据;需手动建库表、配置映射或应用层合并,且必须用change replication source to + for channel指定唯一语义化通道名。

replicate_rewrite_db 或 replicate_rewrite_table 做映射,或在应用层做逻辑合并。
必须用 CHANGE REPLICATION SOURCE TO + FOR CHANNEL
MySQL 8.0+ 已彻底移除 CHANGE MASTER TO,所有配置都必须显式指定通道名。漏写 FOR CHANNEL 'xxx' 会直接报错:ERROR 3079 (HY000): Multiple channels exist, please specify channel name。
- 通道名必须语义清晰且唯一,比如
'orders_us'、'logs_apac',避免用'master1'这类无上下文命名 - 重复使用同一通道名会触发
ERROR 3077 (HY000): Channel name already exists - 配置前务必先执行
STOP REPLICA;,否则可能因并发修改报ERROR 3080
binlog_format = ROW 和 GTID_MODE = ON 是硬性前提
只要任一主库的 binlog_format 是 STATEMENT 或 MIXED,对应通道就会静默卡住:SQL 线程状态变成 Waiting for dependent transaction to commit,Seconds_Behind_Source 持续增长,但无明确错误提示。
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
- 检查方式:在各主库上执行
SHOW VARIABLES LIKE 'binlog_format'; - 修改方式(MySQL 8.0+):
SET PERSIST binlog_format = 'ROW';,然后重启mysqld;仅SET GLOBAL重启后失效 - 启用 GTID 后,
SOURCE_AUTO_POSITION = 1是强制的,不能再填SOURCE_LOG_FILE/SOURCE_LOG_POS,否则报ERROR 3077
SHOW REPLICA STATUS 默认只显示空通道,查状态必须带 FOR CHANNEL
这是最常被忽略的操作陷阱:你执行 SHOW REPLICA STATUS; 看到 Replica_IO_Running: Yes,就以为所有通道都正常——其实它只反映默认空字符串通道的状态,其他通道完全不显示。
- 查单个通道真实状态:
SHOW REPLICA STATUS FOR CHANNEL 'orders_us'; - 重点关注字段:
Retrieved_Gtid_Set(是否持续增长)、Executed_Gtid_Set(是否跟上)、Seconds_Behind_Source(该通道延迟) - 想批量查看所有通道?查
performance_schema.replication_connection_status表,关键字段是CHANNEL_NAME和SOURCE_UUID
表名/库名冲突必须手动处理,多源复制不解决业务级合并
MySQL 多源复制不会帮你把 shop_db.orders 和 logistics_db.orders 自动合入一张 all_orders 表。它只是把两个主库的 binlog 分别回放到各自对应的库和表里——如果目标从库上没有 shop_db 或 logistics_db,就会报 Table 'xxx' doesn't exist。
- 必须提前在从库上
CREATE DATABASE,库名大小写需与主库完全一致 - 如需跨库映射(比如把主库 A 的
db1.t1写到从库的merged.t1),要用replicate_rewrite_db或replicate_rewrite_table,且需在my.cnf中配置并重启 - 自增主键冲突风险高:多个主库若都用
AUTO_INCREMENT,即使设了auto_increment_offset,从库自身写入过该表也会导致计数器错乱,建议将从库对应表设为READ ONLY
Seconds_Behind_Source 在多源下只反映单通道延迟,无法体现“所有主库数据是否同步到了同一时间点”。如果你需要强一致汇总,得在应用层加时间戳对齐或引入 CDC 工具。










