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