zoukankan      html  css  js  c++  java
  • MySQL 多源复制(Mulit-Source Replication)

    MySQL多源复制方案

     

         看复制源Master_1的同步状态:SHOW SLAVE STATUS FOR CHANNEL 'Master_1'G
    看复制源Master_2的同步状态:SHOW SLAVE STATUS FOR CHANNEL 'Master_2'G
     slave上my.cnf的msqld添加:slave-skip-errors = 1050,1051 。这一个非常重要,不然无法实现相同数据结构(同库名同表名)的多源复制。这点官方文档和网上的帖子上都没提到过。最好专门弄一台主机做ddl,作为master1和master2的master,master1和master2只有一台开启slave_log_update.
     多master上的主键重复问题测试:多源复制自身没有主键重复处理机制。只能从架构和设计上解决。目前有2中方案:master主键(退化成非主键)+serverid等标识符组成联合主键;第二种是步长方案。
    1、步长方案:
    如果有2个主机2个实例,则:
          主机1:
              SET @@auto_increment_offset=1;#起始值
              SET @@auto_increment_increment=2;#步长
              主机2:
          SET @@auto_increment_offset=2;#起始值
               SET @@auto_increment_increment=2;

             上述set方法,只是临时的,重启后 失效。要永久的就需要配置到my.cnf里面去:

        [mysqld]
        auto_increment_offset=1  #起始值
       auto_increment_increment=5  #步长

      多源复制方案总结说明:

    一、场景1:

        源库库名不同或者表名不同,并且同步之后的slave也是不同库名或者不同表名。那么用mysql5.7原生的多源复制就可以搞定,基本不会出现大的问题。

    二、场景2:

        源库的库名和表名以及数据结构都相同,并且同步之后的slave也具有相同的结构。那么原生的多源复制就无法直接搞定,要通过设计和架构来解决复制出现的多种问题。

        主要是下面这些问题:

    1、ddl冲突:

               方法a:在所有源master前面再布一个总master专门做ddl(组成一主多从),源master只允许其中一台开启log_slave_updates。     

               方法b:暂时不管,ddl冲突的时候,手动跳过复制错误。这时候要重启slave ,会造成slave暂时不可用。

    2、主键和唯一约束冲突:

        a、自增主键:用步长方案。比如有3台源master实例,那么自增起始值分别为1、2、3,自增步长都为3。这里需要预留足够的扩节点空间,比如预计以后最多可能会有10台源master,那么自增起始值分别是1到10,自增步长为10。步长配置方法参考前面的说明。

        b、业务主键:原始主键退化,用 原始主键+servieid(能唯一标识一个实例即可 ,最好用现成的业务字段)组成联合主键。slave查询的时候直接先用servieid过滤,过滤之后的数据集就是原始主键唯一的了。

        c、唯一约束:也采用b方案。

     

    场景2的架构图:

     

     

    在上图架构的基础上,每台主机的具体配置方法,参考前面的 主从复制 配置说明。

     配置SQL如下: 在备机执行

    CHANGE MASTER TO  MASTER_HOST="127.0.0.1",  MASTER_PORT=18601,  MASTER_USER="root",  MASTER_PASSWORD="cc.123",MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=853 FOR CHANNEL 'm_1'; 
    CHANGE MASTER TO  MASTER_HOST="127.0.0.1",  MASTER_PORT=18602,  MASTER_USER="root",  MASTER_PASSWORD="cc.123",MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=505 FOR CHANNEL 'm_2'; 
    
    SHOW SLAVE STATUS
    
    START SLAVE FOR CHANNEL 'm_1'; 
    START SLAVE FOR CHANNEL 'm_2'; 
    

      

  • 相关阅读:
    结对编程-马尔科夫链作业成绩
    结对编程-四则运算(挑战出题)成绩及点评
    结对编程-四则运算成绩
    结对编程-四则运算(挑战出题)
    结对编程
    每天进步一点点-第二天卒
    每天进步一点点-深度学习入门-基于Python的理论与实现 (一)
    今天准备更新每天提高一点点系列
    Books
    WPF命令好状态刷新机制
  • 原文地址:https://www.cnblogs.com/zping/p/9172731.html
Copyright © 2011-2022 走看看