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来做多源复制
    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

        • 参数的具体含义,我已经在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
        • #Slave_IO_Running和Slave_SQL_Running都是YES,那说明没问题
        • mysql> show slave status for channel ‘newmaster-1‘ \G
        • #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

    原文地址:https://blog.51cto.com/itzhoujun/2353940

    时间: 2024-08-29 15:31:25

    6:多源复制的实现的相关文章

    MySQL 5.7.9多源复制报错修复

    版本:5.7.9 用5.7.9的版本搭建MySQL多源复制测试环境 开发说复制出现问题,上去看了一下: mysql> show slave status\G*************************** 1. row ***************************               Slave_IO_State: Waiting for master to send event                  Master_Host: 182.2.2.11     

    多源复制开关复制命令和监控

    多源复制开关复制命令: start slave io_thread|sql_thread for channel 'master-1563306'; stop slave io_thread|sql_thread for channel 'master-1563307'; 多源复制监控 show slave status for channel 'master-65303306'; select * from replication_connect_status;

    mariadb 10 多源复制(Multi-source replication) 业务使用场景分析,及使用方法

    mariadb 10 多源复制(Multi-source replication) 业务使用场景分析,及使用方法 官方mysql一个slave只能对应一个master,mariadb 10开始支持多源复制,一个slave可以有多个master,分别从各自的master复制不同的DB. 这个特性可以用在OLAP环境中,传统电商DB都是拆了再拆,分库分表,sharding,而OLAP环境或者大数据平台环境,通常需要各种数据的聚合,多个平台多个DB数据的复合查询,而这些数据分散在各个库中,怎么办了,当

    MySQL 5.7的多源复制

    MySQL 5.7已经开始支持了多源复制,相信小伙们都很激动,MySQL 5.7之前只能实现一主一从.一主多从或者多主多从的复制,如果想实现多主一从的复制,只好使用MariaDB,但是MariaDB又与官方的MySQL版本不兼容的,在MySQL 5.7版本已经可以实现多主一从的复制了.MySQL 5.7版本相比之前的版本,无论在功能还是性能.安全等方面都已经提升了不少,值得大家去研究和使用. MySQL 5.7版本之前的最常见的复制方式,一主一从或者一主多从的架构: MySQL 5.7之后就可以

    MySQL5.7多源复制的实验

    MySQL5.7多源复制的实验 node1: 192.168.2.171     master1 node2: 192.168.2.172     slave node3: 192.168.2.170     master2 node2上执行: change master to master_host='192.168.2.171', master_user='rpl', master_password='[email protected]', master_port=3306, master_

    基于GTID的MySQL多源复制配置

    多源复制的意义 1.可以在一个从库上对多个服务器的数据库进行汇总,或者对一个数据库的分库分表进行汇总. 2.集约使用从库服务器的硬件资源,毕竟弱一个数据库业务量较小确占用整个服务器资源是不经济的. 3.更方便的对个业务库进行数据备份,优化数据库备份脚本编写逻辑 拓补图 实施步骤 1.备份主库上的数据,考虑到gtid的问题建议只采用mysqldump程序进行备份 centos:#mysqldump --login-path=3306 \ #mysql官方工具都支持login-path快速登录   

    mysql 多源复制

    mysql5.7新特性多源复制很实用,方便对分库环境进行汇总,集中备份和数据统计分析. 我的实验环境3台机器,mysql版本:5.7.16 10.10.203.102 从库 10.10.203.93 主库 10.10.203.94 主库 操作步骤: (1)当一个从库是多源复制结构,那么master_info和relay_log_info不能用file方式来存储,必须使用table,它不支持file. 10.10.203.102 从库上操作 在配置文件中新增: [mysqld] master_in

    MariaDB的GTID复制和多源复制

    什么是GTID? GTID就是全局事务ID(global transaction identifier ),最初由google实现,官方MySQL在5.6才加入该功能.GTID实际上是由UUID+TID组成的.其中UUID是一个MySQL实例的唯一标识.TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增. 什么是多源复制? 多源复制意味着一个服务器能从多个从服务器上复制.这是MariaDB 10.0的一个新特性. 实验系统:CentOS 6.6_x86_64 实验前提:防火墙和se

    Mysql5.7多源复制,过滤复制一段时间后增加复制一个库的实现方法

    多源复制如果是整个实例级别的复制,那不存在下面描述的情况. 如果是对其中一个或多个主实例都是过滤复制,并且运行一段时间后,想在这个源上再增加一个库怎么实现? 主1:192.168.1.10 3306     db1     db2 主2:192.168.1.20 3306     db3 从:  192.168.1.30 3306 假如之前实现的是过滤复制,复制的是主1的db1 和 主2的db3,已经运行一段时间了.现在想增加主1上的db2,该如何实现? 具体实现方法如下: 1. 使用mysql

    MySQL多源复制搭建

    1.1     实验概要 1.1.1  实验假设 本实验假设已经完成操作系统和MySQL安装部署. 1.1.2  实验目的 MySQL5.7的多源复制技术搭建部署,然后简单测试. 1.1.3  环境信息 操作系统 MySQL版本 服务器地址 服务器角色 Centos7 5.7.18 192.168.102.23 source 1 Centos7 5.7.18 192.168.102.24 source 2 Centos7 5.7.18 192.168.102.25 target 1.1.4  实