MySQL多源复制(Multi-Source Replication)允许一个从服务器(Slave)同时从多个主服务器(Master)复制数据,常用于数据聚合、集中备份等场景。它基于GTID或传统日志位置的复制机制实现。以下是MySQL多源复制的安装与配置步骤。
环境准备与基础要求
确保所有服务器运行支持多源复制的MySQL版本(5.7及以上推荐使用GTID模式)。主库和从库需开启二进制日志,且每个主库有唯一server-id。
至少两个主服务器(Master1、Master2),一个从服务器(Slave) 网络互通,防火墙开放3306端口 各实例server-id不能重复 建议启用GTID以简化管理主服务器配置(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方式存储复制信息是多源复制的必要条件,避免冲突。
登录从库,为每个主库分别配置复制通道:
-- 配置来自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'; <p>-- 配置来自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多源复制就能稳定运行。
