MariaDB 多源复制
1️⃣ 什么是多源复制?
一句话定义:
让 一台从库 同时从 多台主库 拉取数据,每条链路独立命名、独立过滤、独立故障处理。
与 多主(multi-master) 不同——后者是多台服务器互为主从并可同时写入;多源复制仍是单向,仅从库聚合。
2️⃣ 典型场景
场景 | 价值 |
---|---|
数据中心聚合 | 把各地分库汇总到一台分析库 |
分片后统一查询 | 每个分片=一个源,从库做全局报表 |
零停机迁移 | 并行同步老库+新库,最后流量切换 |
灾备聚合 | 多地机房 → 异地灾备中心 |
3️⃣ 30 秒架构图
┌───────┐ ┌───────┐ ┌───────┐
│ M1 │ │ M2 │ │ M3 │
└──┬────┘ └──┬────┘ └──┬────┘│ │ │└───────────┴───────────┘▲┌──────────┴──────────┐│ 单台从库 S ││ multi-source │└─────────────────────┘
- M1/M2/M3 独立业务库
- S 通过 3 条通道 分别同步
4️⃣ 快速部署(MariaDB 10.3+)
4.1 主库统一配置
第一台
[mysqld]
server-id = 1 # 每台唯一
log-bin = mysql-bin
binlog-format = ROW
gtid-strict-mode = 1
第二台
[mysqld]
server-id = 2 # 每台唯一
log-bin = mysql-bin
binlog-format = ROW
gtid-strict-mode = 1
第三台
[mysqld]
server-id = 3 # 每台唯一
log-bin = mysql-bin
binlog-format = ROW
gtid-strict-mode = 1
4.2 从库配置
[mysqld]
server-id = 101
gtid-ignore-duplicates = 1 # 多源必开
4.3 建立通道
-- 通道 m1
CHANGE MASTER 'm1' TOMASTER_HOST='10.0.0.1',MASTER_USER='repl',MASTER_PASSWORD='repl123',MASTER_USE_GTID=current_pos;-- 通道 m2
CHANGE MASTER 'm2' TOMASTER_HOST='10.0.0.2',MASTER_USER='repl',MASTER_PASSWORD='repl123',MASTER_USE_GTID=current_pos;CHANGE MASTER 'm3' TOMASTER_HOST='10.0.0.3',MASTER_USER='repl',MASTER_PASSWORD='repl123',MASTER_USE_GTID=current_pos;START ALL SLAVES;
5️⃣ 过滤规则(每通道独立)
-- m1 只同步 db1
CHANGE REPLICATION FILTER 'm1'replicate_wild_do_table = ('db1.%');-- m2 忽略系统库
CHANGE REPLICATION FILTER 'm2'replicate_wild_ignore_table = ('mysql.%','test.%');
MariaDB 用
SET GLOBAL channel.var=value
;MySQL 用FOR CHANNEL
语法。