【MySQL案例】MySQL5.7如何配置多源复制Multi-source replication

本文是对官方手册的翻译和注释补充。2015年9月15日23:35:25


多源复制是什么?
多源复制是把多个mysql数据库复制到一台slave数据库上面。


多源复制什么用?
多源复制可以用来把多个数据库服务器备份到一个数据库服务器,分表的合并,把多个数据库机器的数据拉取到一台机器。


实现方式?
在多源复制中,在slave上为每个master创建一个复制通道用来同步从主库接受的事务。


如何配置多源复制?
多源复制既可以使用GTID也可以使用传统的基于二进制日志的复制。
在多源复制结构中,slave的repository信息需要设置为TABLE模式:
--master-info-repository=TABLE
--relay-log-info-repository=TABLE


如何添加进行多源复制的Master?
-- 主库和从库需要都开启GTID 或者都不开启GTID。
向多源复制的slave中添加基于GTID的Master,在slave上执行同步配置:
CHANGE MASTER TO 
MASTER_HOST='mysql4',
MASTER_USER='repl',
MASTER_PORT=3306,
MASTER_PASSWORD='repl'
FOR CHANNEL "master-1-gtid"
;
向多源复制的slave中添加基于二进制日志的Master,在slave上执行同步配置:
CHANGE MASTER TO
MASTER_HOST='mysql4',
MASTER_USER='repl',
MASTER_PORT=3306,
MASTER_PASSWORD='repl',
MASTER_LOG_FILE="mysql-bin.000005",
MASTER_LOG_POS=2564
FOR CHANNEL "master-1-binlog"
;

--在主库创建用于复制的用户:
-- grant replication slave, replication client on *.* to 'repl'@'%' identified by 'repl';

如何启动多源复制线程?
启动所有的管道:
START SLAVE [ io_thread | sql_thread ];
启动指定的管道:
START SLAVE [ io_thread | sql_thread ] FOR CHANNEL channel;

如何停掉多源复制线程?
停掉所有的管道:
STOP SLAVE [ io_thread | sql_thread ];
停掉指定的管道:
STOP SLAVE [ io_thread | sql_thread ] FOR CHANNEL channel;

如何重置多源复制线程?
重置所有的管道:
RESET SLAVE;
重置指定的管道:
RESET SLAVE FOR CHANNEL channel;
-- 执行reset slave只会重置复制的信息,不会清除复制信息,需要执行RESET SLAVE ALL命令来清除。但是执行的时候需要注意STOP其它CHANNEL,并记录执行的复制位置信息。

如何监控多源复制的slave状态?
查看Performance Schema的表
select * from performance_schema.replication_connection_status where channel_name='master1'\G
或者执行SHOW SLAVE STATUS FOR CHANNEL channel_name命令。


你可能感兴趣的:(mysql)