加入收藏 | 设为首页 | 会员中心 | 我要投稿 昌吉站长网 (https://www.0994zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

6 多源复制的达成

发布时间:2022-06-28 13:48:17 所属栏目:MySql教程 来源:互联网
导读:MySQL多源复制允许复制slave同时从多个源接收事务。可以使用多源复制将多个服务器备份到一个服务器,合并表碎片,并将来自多个服务器的数据合并到一个服务器。多源复制在应用事务时不实现任何冲突检测或解决,如果需要,这些任务留给应用程序完成。 下面我
  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';
  我们使用使用动态修改
  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)
  #说明设置成功了
  登录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)
  登录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:多源复制的实现
 
  mysql> show slave status for channel 'newmaster-1' G
  6:多源复制的实现
 
  接下来就是分别在master和new master针对数据库操作一些测试数据,然后看下slave是否同步过来了,如果同步过来了,那就没啥问题。

(编辑:昌吉站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!