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';

  

最新文章

  1. 旧版本APP被开发人员下架,新版本重新上传依然显示被下架
  2. GJM :SqlServer语言学习笔记
  3. 关于linux asp.net MVC网站中 httpHandlers配置无效的处理方法
  4. Entity Framework 5.0系列之数据操作
  5. JS添加DOM元素CSS权重BUG
  6. easyui textbox event 添加
  7. myeclipse2014安装反编译插件
  8. Mvc中DropDownList 和DropDownListFor的常用方法
  9. ARM异常---一个Uart中断的触发处理过程:
  10. HMM 隐马尔科夫模型
  11. 0711HTML初体验
  12. 分享:苹果APP更新上架被拒的另一种理由(Safety - Objectionable Content)
  13. Linux基础学习(10)--Shell基础
  14. ViewpageAdapter
  15. configure编译选项
  16. UML和模式应用3:迭代和进化式分析和设计案例研究
  17. Android主页Activity对多个Fragment实现不同的沉浸式标题(图片或者文字标题)
  18. C# 动态创建数据库三(MySQL)
  19. 【Java】异常类处理层次
  20. 96D - Police Stations

热门文章

  1. Shape使用
  2. vc写的dll被mingw的g++编译引用
  3. 【win10】更改资源管理器显示:快速访问和此电脑
  4. 使用原生Java代码生成可执行Jar包
  5. spring整合Jersey 无法注入service的问题
  6. mysql命令大全用户管理相关命令
  7. hdu3613 Best Reward【Manacher】
  8. 如何设置Mac电脑的DNS
  9. css学习_css盒模型及应用
  10. 进程池的同步方法 pool.apply