6:多源复制的实现
admin
2023-04-19 03:22:13
0
  • 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来做多源复制
    1. 登录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';
      • 我们使用使用动态修改
        • 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)
        • #说明设置成功了
    2. 登录new master(如果有多个new master就重复此步骤)
      • 要启用基于GTID的复制,必须在启用GTID模式的情况下启动每个服务器,所以我们先修改配置文件,修改后配置文件再重启mysql
        • 6:多源复制的实现
        • 参数的具体含义,我已经在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)
    3. 登录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
        • 6:多源复制的实现
        • #Slave_IO_Running和Slave_SQL_Running都是YES,那说明没问题
        • mysql> show slave status for channel 'newmaster-1' \G
        • 6:多源复制的实现
        • #Slave_IO_Running和Slave_SQL_Running都是YES,那说明没问题
          1. 接下来就是分别在master和new 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

相关内容

热门资讯

“拖延毫无出路”:美智库疾呼出... 【文/观察者网 潘昱辰 编辑/高莘】“如果没有国家战略扶持,美国汽车产量将持续下滑,直接影响美国国家...
凤凰记者拍到空军一号飞抵首都机... “哪儿呢?”“来了,这!这!这!”5月13日晚,特朗普专机空军一号抵达北京首都机场 ,凤凰卫视记者拍...
黄仁勋最后时刻登上“空军一号”... 美国当地时间5月12日,美国总统特朗普启程访华。途中,“空军一号”于阿拉斯加加油停靠时,英伟达公司总...
美财长贝森特专机先期抵达北京 13日下午,在特朗普抵达前,美国财长贝森特的专机先期飞抵北京,凤凰卫视记者拍摄到了专机降落前的画面。
鸿蒙版荣耀商城上架华为应用市场... PChome 5月13日消息,现荣耀商城App已正式上架华为鸿蒙应用市场,版本号26.4.0.0。 ...
员工摸鱼混日子怎么解决?推荐先... 很多企业都遇到同一个难题:员工上班消极懈怠、敷衍应付,上班时间闲散摸鱼,正事拖着不做,任务应付交差,...
专访月泉仿生胡喆祺:深耕灵巧手... 当下,人形机器人产业正迎来从技术验证向规模化落地跃迁的关键窗口期,而灵巧手作为具身智能的 “最后一厘...
腾讯控股2026财年第一财季净... IT之家 5 月 13 日消息,腾讯控股今日发布 2026 财年第一财季(2026 年 1 月 1 ...
升任华为轮值董事长,为什么是汪... 导语:鲜少出现在大众视野里的汪涛,接棒华为轮值董事长,出乎很多人意料,但这背后,既是其个人能力与长期...
加盟商参加中通快运酒局后身亡,... 5月11日,新黄河客户端以《加盟商参加中通快运酒局后身亡》为题,报道了代理加盟商纪某某在连续参加两场...