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

  

MySQL 多源复制(Mulit-Source Replication)的更多相关文章

  1. mariadb多源复制 muiltil source replication

    环境:centos-6.5      Mariadb:10.1.13-MariaDB 多源复制:企业数据库中写的需求较大,以至于I/O负载比较大,那么就必须把写的操作分摊到多台主服务器上进行,然后在将 ...

  2. MySQL系列详解十:MySQL多源复制演示-技术流ken

    前言 多源复制即多主一从结构,多个主服务器端的数据都会同步到后端一个从服务器上面.至于为什么要做多源复制下面的总结很到位. 1.灾备作用:将各个库汇总在一起,就算是其他库都挂了(整个机房都无法连接了) ...

  3. MySQL多源复制

    MySQL多源复制 1. 配置多源复制 1.1 配置环境如下 1.2 从库的重要参数配置 1.3 在Master上导出需要同步的数据库 1.4 在master上创建复制账号 1.5 备份数据导入 1. ...

  4. (转)MySQL多源复制

    原文:https://dev.mysql.com/doc/refman/5.7/en/replication-multi-source.html MySQL多源复制概述 MySQL多源复制使复制从接受 ...

  5. MySQL多源复制(八)

    一.什么是多源复制 MySQL 5.7发布后,在复制方面有了很大的改进和提升.比如开始支持多源复制(multi-source)以及真正的支持多线程复制了.多源复制可以使用基于二进制日志的复制或者基于事 ...

  6. 基于Docker搭建MySQL多源复制环境

    MySQL5.7在主从复制上面相对之前版本多了一些新特性,包括多源复制.基于组提交的并行复制.在线修改Replication Filter.GTID增强.半同步复制增强等. 多源复制:多源复制加入了一 ...

  7. MySQL多源复制【转】

    什么是多源复制? 首先,我们需要清楚 multi-master 与multi-source 复制不是一样的. Multi-Master 复制通常是环形复制, 你可以在任意主机上将数据复制给其他主机. ...

  8. mysql多源复制安装

    多源复制的意思是多主一从. 多源复制的前提是必须要开启GTID模式. master1 :192.168.1.110 master2 :192.168.1.111 slave :192.168.1.15 ...

  9. MySQL 5.7 多源复制实践

    多源复制使用场景 数据分析部门会需要各个业务部门的部分数据做数据分析,这个时候就可以用到多源复制把各个主数据库的数据复制到统一的数据库中. 在从服务器进行数据汇总,如果我们的主服务器进行了分库分表的操 ...

随机推荐

  1. QT动态库和静态库使用

    软件版本:QT5.12.0 + Qt Creator4.8.0 动态链接 动态链接库又叫"共享库",即sharedLib. Qt Creator中新建项目,选择"Libr ...

  2. session一直报错Session store not set on request

    Route::group(['middleware' => ['web']], function () { //});仍然报错,看了 session是使用默认file,没问题:app/stora ...

  3. [UFLDL] *Sparse Representation

    Deep learning:二十九(Sparse coding练习) Deep learning:二十八(使用BP算法思想求解Sparse coding中矩阵范数导数) Deep learning:二 ...

  4. js的微任务和宏任务

    1.机制如下: 注意一点: 宏任务需要多次事件循环才能执行完,微任务是一次性执行完的: 2.宏任务macrotask: (事件队列中的每一个事件都是一个macrotask) 优先级:主代码块 > ...

  5. MySQL 去除字段中的换行和回车符

    今天csv 导入关键词的时候遇到问题 字段结束会有 回车符号 解决方法: ), ),'');          char(10):  换行符          char(13):  回车符

  6. rayleighchan实现瑞利多径衰落信

    rayleighchan实现瑞利多径衰落信道 1.命令格式: chan = rayleighchan(ts,fd,tau,pdb) 其中: ts—为输入信号的采样周期, fd—就是Doppler频偏, ...

  7. Pro ASP.NET MVC –第三章 MVC模式

    在第七章,我们将创建一个更复杂的ASP.NET MVC示例,但在那之前,我们会深入ASP.NET MVC框架的细节:我们希望你能熟悉MVC设计模式,并且考虑为什么这样设计.在本章,我们将讨论下列内容 ...

  8. opencv中 int main(int argc,char* argv[])详解

    opencv中  int main(int argc,char* argv[])详解 argc是命令行总的参数个数     argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数     ...

  9. [No0000C3]StarUML2 全平台破解方法

    首先,找到安装目录下的"LicenseManagerDomain.js"文件,路径"StarUML\www\license\node\LicenseManagerDoma ...

  10. 关于JAVA项目中的常用的异常处理情况

         Java异常处理的几个原则如下.       1)不要丢弃异常,捕获异常后需要进行相关处理.如果用户觉得不能很好地处理该异常,就让它继续传播,传到别的地方去处理,或者把一个低级的异常转换成应 ...