6:多源复制的实现
发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,MySQL多源复制允许复制slave同时从多个源接收事务。可以使用多源复制将多个服务器备份到一个服务器,合并表碎片,并将来自多个服务器的数据合并到一个服务器。多源复制在应用事务时不实现任何冲突检测或解
千家信息网最后更新 2025年11月13日6:多源复制的实现
- MySQL多源复制允许复制slave同时从多个源接收事务。可以使用多源复制将多个服务器备份到一个服务器,合并表碎片,并将来自多个服务器的数据合并到一个服务器。多源复制在应用事务时不实现任何冲突检测或解决,如果需要,这些任务留给应用程序完成。
- 下面我们就来配置一个多源复制,多源复制这种拓扑至少需要两个masters和slaves。
- 服务器环境:192.168.1.2 (master1) 192.168.1.3 (new master) 192.168.1.4 (slave)
- 可以将多源复制拓扑中的masters配置为使用基于全局事务标识符(GTID)的复制或基于二进制日志位置的复制,有关如何使用基于GTID的复制配置master,请看https://blog.51cto.com/itzhoujun/2351367。 有关如何使用基于文件位置的复制配置master,请参见https://blog.51cto.com/itzhoujun/2352688和https://blog.51cto.com/itzhoujun/2352693
- 本次我们基于GTID来做多源复制
- 登录slave
- 多源复制拓扑中的slaves需要基于TABLE的存储库。多源复制与基于FILE的存储库不兼容。mysqld使用的存储库类型可以在启动时配置,也可以动态配置。分别有以下两种形式
- 要在启动时配置复制slave使用的存储库类型,请使用以下选项启动mysqld:
- --master-info-repository=TABLE --relay-log-info-repository=TABLE
- 要修改使用FILE存储库以使用TABLE存储库的现有复制slave,请通过运行以下命令动态转换现有复制存储库:
- STOP SLAVE;
- SET GLOBAL master_info_repository = 'TABLE';
- SET GLOBAL relay_log_info_repository = 'TABLE';
- 要在启动时配置复制slave使用的存储库类型,请使用以下选项启动mysqld:
- 我们使用使用动态修改
- mysql> STOP SLAVE;
- Query OK, 0 rows affected (0.00 sec)
- mysql> SET GLOBAL master_info_repository = 'TABLE';
- Query OK, 0 rows affected (0.00 sec)
- mysql> SET GLOBAL relay_log_info_repository = 'TABLE';
- Query OK, 0 rows affected (0.00 sec)
- mysql> show variables like 'master_info_repository';
- +------------------------+-------+
- | Variable_name | Value |
- +------------------------+-------+
- | master_info_repository | TABLE |
- +------------------------+-------+
- 1 row in set (0.01 sec)
- mysql> show variables like 'relay_log_info_repository';
- +---------------------------+-------+
- | Variable_name | Value |
- +---------------------------+-------+
- | relay_log_info_repository | TABLE |
- +---------------------------+-------+
- 1 row in set (0.00 sec)
- #说明设置成功了
- 多源复制拓扑中的slaves需要基于TABLE的存储库。多源复制与基于FILE的存储库不兼容。mysqld使用的存储库类型可以在启动时配置,也可以动态配置。分别有以下两种形式
- 登录new master(如果有多个new master就重复此步骤)
- 要启用基于GTID的复制,必须在启用GTID模式的情况下启动每个服务器,所以我们先修改配置文件,修改后配置文件再重启mysql
- 参数的具体含义,我已经在https://blog.51cto.com/itzhoujun/2351367和https://blog.51cto.com/itzhoujun/2352693详细介绍过了
- mysql> show variables like '%gtid%';
- +----------------------------------+-------------------------------------------+
- | Variable_name | Value |
- +----------------------------------+-------------------------------------------+
- | binlog_gtid_simple_recovery | ON |
- | enforce_gtid_consistency | ON |
- | gtid_executed_compression_period | 1000 |
- | gtid_mode | ON |
- | gtid_next | AUTOMATIC |
- | gtid_owned | |
- | gtid_purged | b45f359b-1747-11e9-bee2-00163e0ea0d9:1-15 |
- | session_track_gtids | OFF |
- +----------------------------------+-------------------------------------------+
- 8 rows in set (0.00 sec)
- #可以看到这个结果,就说明设置成功了
- 添加复制用户(如果已经有复制用户了,则跳过这一步)
- mysql> CREATE USER 'xiaoming'@'%' IDENTIFIED BY 'Xiaoming@123456';
- Query OK, 0 rows affected (0.01 sec)
- mysql> GRANT REPLICATION SLAVE ON . TO 'xiaoming'@'%';
- Query OK, 0 rows affected (0.01 sec)
- 要启用基于GTID的复制,必须在启用GTID模式的情况下启动每个服务器,所以我们先修改配置文件,修改后配置文件再重启mysql
- 登录slave
- 使用CHANGE MASTER TO语句通过使用FOR CHANNEL channel 子句将新master添加到通道
- mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.4', MASTER_USER='xiaoming', MASTER_PASSWORD='Xiaoming@123456', MASTER_AUTO_POSITION = 1 FOR CHANNEL 'newmaster-1';
- Query OK, 0 rows affected, 2 warnings (0.03 sec)
- #如果有多个new master 则需要重复此步骤,根据实际情况更改主机名,端口和通道名称。
- 启动多源复制slaves
- 添加了要用作复制master的所有通道后,使用START SLAVE thread_types语句启动复制。在slave上启用多个通道后,您可以选择启动所有通道,也可以选择要启动的特定通道
- 要启动所有当前配置的复制通道:
- START SLAVE thread_types;
- 要仅启动命名通道,请使用FOR CHANNEL channel子句:
- START SLAVE thread_types FOR CHANNEL channel;
- 我们这里直接START SLAVE,启动所有的渠道
- 然后我们查看一下状态信息
- mysql> select * from performance_schema.replication_applier_status;
- +--------------+---------------+-----------------+----------------------------+
- | CHANNEL_NAME | SERVICE_STATE | REMAINING_DELAY | COUNT_TRANSACTIONS_RETRIES |
- +--------------+---------------+-----------------+----------------------------+
- | | ON | NULL | 0 |
- | newmaster-1 | ON | NULL | 0 |
- +--------------+---------------+-----------------+----------------------------+
- 2 rows in set (0.00 sec)
- #表示有两个渠道,那么分别看下两个渠道的信息
- mysql> show slave status for channel '' \G
- #Slave_IO_Running和Slave_SQL_Running都是YES,那说明没问题
- mysql> show slave status for channel 'newmaster-1' \G

- #Slave_IO_Running和Slave_SQL_Running都是YES,那说明没问题
- 接下来就是分别在master和new master针对数据库操作一些测试数据,然后看下slave是否同步过来了,如果同步过来了,那就没啥问题
- 使用CHANGE MASTER TO语句通过使用FOR CHANNEL channel 子句将新master添加到通道
- 登录slave
参考资料:https://dev.mysql.com/doc/refman/5.7/en/replication-multi-source.html
PREV: 5:使用GTID进行复制 https://blog.51cto.com/itzhoujun/2352693
NEXT: 7:基于语句复制和行复制的优点和缺点 https://blog.51cto.com/itzhoujun/2354045
多源
配置
通道
存储
多个
服务器
服务
两个
事务
动态
拓扑
数据
文件
渠道
语句
问题
登录
成功
位置
信息
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广州五三互联网科技有限公司
万网的服务器
青岛服务器数据中心亿信通
魔兽世界服务器连接不上酒店
用户名跟数据库比较语句
英文参考文献 数据库
聊城戴尔服务器哪个系列好
中学校园网络安全检查表
大同分销软件开发方案
中小企业使用云服务器有什么好处
手机网络软件开发
基于嵌入式设备的网络安全机制
五邑大学网络安全
jdbc配数据库连接池
正规的浪潮服务器在哪个地方
tftp服务器 XP
网络安全进校园手抄报初一
从服务器返回了一个单号怎么处理
网络安全黑板报 高中
停车场支付模块软件开发合同
广州蜚美网络技术有限公司
安卓用是软件开发
网络安全培训解决方案
数据库查询字段相同的个数
信息网络安全高工考试
服务器管理口是哪个
人图北京网络技术
以色列首席网络安全官
服务器 管理口 ip
洛阳移动网络安全宣传周