且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

MySQL多源复制解决方案

更新时间:2022-08-19 15:28:44

MySQL轻松实现一主多从,但要将多个实例的数据复制到一个实例中就比较难啦,幸好在MariaDB中已经实现multi-master replication 功能;

在介绍MariaDB的功能前,我们先看看一些开源的解决方案:

1、Tungsten replicator 支持异构数据复制,java实现,成本较高;

2、使用mysqlbinlog或者类似工具拉取binlog,实现较为简单;

3、采用级联复制,比如在两个master之间实现复制,M1->M2,M2上对应的表存储引擎使用Blackhole引擎,并且开启log-slave-update选项;最后在M2之后再挂一台slave即可;

4、采用Federated存储引擎,在一台实例上创建远端数据表的“软链接”

5、其他各种patch或者工具

以上几种方式,大家可能已经都接触过,最近MariaDB 10.0.5 beta版中已经集成这个功能:

实现方式:

多个复制通道管理:

MySQL管理每个复制通道都是通过Master_Info类,这些函数: start_slave|change_master|stop_slave|show_slave函数都需要一个Master_info指针即可;所以添加通道标示:

CHANGE MASTER ‘connection-name’ TO,START SLAVE ‘connection-name’,STOP SLAVE ‘connection-name’,SHOW SLAVE ‘connection-name’ STATUS;

其中可以通过设置默认connection name :

set @@default_master_connection='';

通道信息保存(暂不考虑类似5.6中的功能):

文件:

multi-master-info-file (master.info带上了multi-前缀),存储使用中的master connection name;

master-info-connection-name.info 当前slave连接master的信息;

relay-log-connection-name.seq-num 从master读取的复制信息;

这些文件的名称均被转换为小写;

此时,show slave status 显示为空,只能单个查看 show slave 'connection name';或者 show all slaves status 来查看状态;

其中binlog为做更改,全部记录在一起;

其他:

如果使用这种方案的话,业务数据不能重叠;

相关限制:

1、目前最多只能拥有64个master;

2、复制线程只能是两个:IO,SQL (解决中。。。);

3、xtradb innodb-recovery-update-relay-log 这个选项需要关闭;

4、slave_net_timeout 影响的是所有connection;

5、slave_heartbeat_period 不起作用;

6、半同步复制不能使用(解决中。。。。)






本文转自 位鹏飞 51CTO博客,原文链接:http://blog.51cto.com/weipengfei/1325322,如需转载请自行联系原作者