6:多源复制的实现
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,MySQL多源复制允许复制slave同时从多个源接收事务。可以使用多源复制将多个服务器备份到一个服务器,合并表碎片,并将来自多个服务器的数据合并到一个服务器。多源复制在应用事务时不实现任何冲突检测或解
千家信息网最后更新 2025年02月01日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安全错误
数据库的锁怎样保障安全
法学专业可以研究网络安全
江西智慧团建软件开发系统
阿里云两核8g数据库并发量
数据库无法识别网络怎么办
陕西中公软件开发专业好吗
用阿里云服务器电脑配置
网络安全职业操守1500字
西安网络安全韩荣峰
小班网络安全课教案
修改数据库可用空间大小
数据库情景分析题
e63安装词汇数据库
高校校园网络安全国内外开题报告
互联网科技商机
周树立网络安全
三级数据库技术大题讲解题
图模型是什么 图数据库
黄慧婷 网络安全
哈利波特里的服务器是什么
教育软件开发资质申请
友怡网络技术维护
如何查看数据库子表
mc服务器末地
金蝶服务器数据库未启动
接口软件开发协议
ecs 数据库
对优炫数据库的评价
巨兽战场服务器不够
渭南网络安全文明
没有软件开发经验怎么应聘呢