MySQL多源复制需在5.7+版本中配置GTID模式,主库开启二进制日志并创建复制用户,从库设置唯一server-id及TABLE格式存储复制信息,通过独立CHANNEL连接各主库,启动复制后检查运行状态与延迟,避免库名冲突并禁用从库写操作以确保数据一致。

MySQL多源复制(Multi-Source Replication)允许一个从服务器(Slave)同时从多个主服务器(Master)复制数据,常用于数据聚合、集中备份等场景。它基于GTID或传统日志位置的复制机制实现。以下是MySQL多源复制的安装与配置步骤。
环境准备与基础要求
确保所有服务器运行支持多源复制的MySQL版本(5.7及以上推荐使用GTID模式)。主库和从库需开启二进制日志,且每个主库有唯一server-id。
主服务器配置(Master1 和 Master2)
编辑每个主库的my.cnf文件,添加如下配置:
[mysqld]server-id = 101
log-bin = mysql-bin
binlog-format = ROW
gtid-mode = ON
enforce-gtid-consistency = ON
log-slave-updates = ON
重启MySQL服务后,登录创建用于复制的账号:
CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;
记录每个主库的当前GTID位置(SHOW MASTER STATUS),便于后续配置。
从服务器配置(启用多源复制)
修改从库的my.cnf:
[mysqld]server-id = 201
master-info-repository = TABLE
relay-log-info-repository = TABLE
relay-log = relay-log
gtid-mode = ON
enforce-gtid-consistency = ON
重启从库。使用TABLE方式存储复制信息是多源复制的必要条件,避免冲突。
登录从库,为每个主库分别配置复制通道:
Sylius开源电子商务平台是一个开源的 PHP 电子商务网站框架,基于 Symfony 和 Doctrine 构建,为用户量身定制解决方案。可管理任意复杂的产品和分类,每个产品可以设置不同的税率,支持多种配送方法,集成 Omnipay 在线支付。功能特点:前后端分离Sylius 带有一个强大的 REST API,可以自定义并与您选择的前端或您的微服务架构很好地配合使用。如果您是 Symfony
-- 配置来自Master1的复制 CHANGE MASTER TO MASTER_HOST='master1_ip', MASTER_USER='repl', MASTER_PASSWORD='repl_password', MASTER_PORT=3306, MASTER_AUTO_POSITION=1 FOR CHANNEL 'master1';-- 配置来自Master2的复制 CHANGE MASTER TO MASTER_HOST='master2_ip', MASTER_USER='repl', MASTER_PASSWORD='repl_password', MASTER_PORT=3306, MASTER_AUTO_POSITION=1 FOR CHANNEL 'master2';
每个CHANNEL名称必须唯一,代表一个独立的复制流。
启动并验证复制状态
启动所有通道:
START SLAVE FOR CHANNEL 'master1'; START SLAVE FOR CHANNEL 'master2';
检查各通道状态:
SHOW SLAVE STATUS FOR CHANNEL 'master1'\G SHOW SLAVE STATUS FOR CHANNEL 'master2'\G
关注Seconds_Behind_Master、Slave_IO_Running、Slave_SQL_Running等字段是否正常。
也可通过以下命令查看所有通道概览:
SELECT * FROM performance_schema.replication_connection_status\G
注意事项:
- 多源复制中,不同主库的数据库名若相同,可能造成冲突,建议提前规划命名策略
- 从库上的写操作应禁止,避免数据不一致
- 定期监控复制延迟和错误日志
- 使用pt-heartbeat可更精确监控延迟
基本上就这些。只要主从配置正确,开启GTID并使用独立通道,MySQL多源复制就能稳定运行。









