一、多源复制介绍
当业务数据被打散到多个数据库实例后,如果需要实现一个从库同时同步多个主库的数据就需要使用多源复制这样的主从架构。在多源复制架构中,从库通过多个不同的复制通道(channel)来接受不同主库的数据,然后将这些数据存放在以通道命名的relaylog中。在MySQL 5.7中一个从库最多可以配置256个复制通道,这些通道名称不能重复(多源复制中每个数据库名也不可重复)。从库数据量控制在1T以内,除非有很好的存储设备,如PCIE-SSD。每个通道可以独立配置和运行,对于数据库的日志等相关配置,每个通道也会生成各自的文件。另需要注意由于半同步复制仅与默认复制通道(for channel "")兼容,不支持与多源复制混用。如果要启用GTID,最好在初始化多源复制时就一并启用,而不要中途调整架构。所有实例复制模式要统一,不能GTID与传统复制混用。
二、多源复制部署与维护
1、多台主库配置和普通复制区别不大,并且仅创建复制用户即可
vi /etc/my.cnf
...
master-info-repository = TABLE #必须为TABLE
gtid-mode = off
...
mysql > grant replication slave client on *.* to 'repl'@'192.168.100.103' identified by '123456'; #每个主库创建一个复制用户即可
2、从库配置时需要创建通道
vi /etc/my.cnf
...
relay-log-info-repository = TABLE #必须为TABLE
...
mysql > change master to master_host='192.168.100.101',master_user='repl',master_password='123456',master_auto_position=1 for channel 'master-101'; #channel的名字可以自定义
mysql > change master to master_host='192.168.100.102',master_user='repl',master_password='123456',master_auto_position=1 for channel 'master-102'; #channel的名字可以自定义
3、通道操作命令
开启多源复制后,由于存在多个通道,所以部分命令需要指明通道名(在上一步配置主从时已经有用到),否则命令对所有通道生效,示例如下
start slave for channel 'master-102' #指定启动通道名为master-102的复制线程
stop slave for channel 'master-102'
show slave status for channel 'master-102'
show relaylog events for channel 'master-102'
flush relay logs for channel 'master-102'
reset slave for for channel 'master-102'
4、在文件系统层面,中继日志名中将带有复制通道的名字;在processlist层面,将会有多个IO线程和SQL线程