MySQL5.7多源主从复制

来源:互联网 发布:为linux开发界面难吗 编辑:程序博客网 时间:2024/04/27 16:02

MySQL5.7多源主从复制

MySQL在5.7.2上面添加了多源复制(Multi-Source)功能,意味着一个从库可以连

多个主库,从而同时进行同步,但是如果是同一个表的话,会存在主键和唯一索引冲突的风险,需要提前做好规划

 

MySQL多源复制的原理

个人认为MySQL能实现多源复制的关键有两点

1.      MySQL5.7中的从库进行同步的SQL_THREAD,IO_THREAD可以并发执行,这使得使多数据源的binlog同时同步变为可能。

2.      MySQL5.7中添加了channel(通道)来判别不同的数据源,这样slave可以非常简单的进行多数据源的配置与区分。

大概的多源复制过程

每个通道都是一个slave去拉去masters的连接,每个通道对应一个IO_THEAD,我们运行不同的“changemaster”命令, 对于每一个主服务器。我们需要用到“for channel”这个参数来提供通信链接的名字。

 

筛选复制数据源

 

 

 

 

 

配置栗子

slave      192.168.60.22:3306

master1   192.168.60.22:3307

master2   192.168.60.22:3308

主库授权:

grant all on *.*to rep@'%' identified by '123456';

从库:

 

配置多通道复制

#只需在原有的复制命令加  for channel ‘channel name’

change master tomaster_host='192.168.60.22',master_port=3307,master_user='rep',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=154for channel 'master1';

change master tomaster_host='192.168.60.22',master_port=3308,master_user='rep',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=154for channel 'master2';

 

GTID下进行配置多源复制

change master tomaster_host='192.168.60.22', MASTER_USER='rep', MASTER_PORT=3307,

MASTER_PASSWORD='123456',MASTER_AUTO_POSITION= 1 FOR CHANNEL 'master1';

 

相关通道命令

show slavestatus

show slavestatus for channel 'master1';

reset slave;

reset slave forchannel 'master1';

stop slave forchannel 'master1';

start slave forchannel 'master1';

 

复制实验

多源复制实验:

master1

create databasetest1;

master2

create databasetest2;

此时查看slave,发现test1和test2已经同步到slave

复制冲突实验

master1

create databasetest3;

master2

create databasetest3;

会报错!!!复制直接出错,所以,多源复制还是要进行差异化插入,如果相同数据进行操作,slave会直接出现复制异常,错误代码1007

异常解决:

stop slave;

set globalsql_slave_skip_counter=1;

使用上述参数后,只能单独开启通道,只执行startslave会报错

start slavefor  channel 'master2';

start slavefor  channel 'master1';

 

 

结论

MySQL5.7的多源复制,是在MySQL可以多线程同步后,依靠多线程所采取的复制模式,但是无法在master端对binlog进行筛选,所以相同操作的binlog进入slave后,slave因为无法应用而报错,在MySQL分表分库后,此模式的使用可以非常简单的merge各data shards.或者备份多个节点数据库的数据到单独的机器。

 

                                                                 By DBTomato

0 0
原创粉丝点击