摘要:在 MySQL 8.0 版本中,提供了多源复制,多源复制的出现对于分库分表的业务提供了极大的便利,本文做了详细的说明
⛳️ 1.多源复制简介
在 MySQL 8.0 版本中,提供了多源复制,多源复制的出现对于分库分表的业务提供了极大的便利,
目前我们已经部署了多套多源复制供统计使用。
MySQL 5.7 之前只能实现一主一从、一主多从或者多主多从的复制。
如果想实现多主一从的复制,只能使用 MariaDB,但是 MariaDB 又与官方的MySQL 版本不兼容。
MySQL 5.7 开始支持了多主一从的复制方式,也就是多源复制。
MySQL 8.0 版本相比之前的版本,无论在功能还是性能、安全等方面都已经有不少的提升。
拓展:MySQL之父Widenius先生离开了Sun之后,觉得依靠Sun/Oracle来发展MySQL,
实在很不靠谱,于是决定另开分支,这个分支的名字叫做MariaDB。
多源复制的好处
可以集中备份,在从库上备份,不会影响线上的数据正常运行
节约购买从库服务器的成本,只需要一个从库服务器即可
数据汇总在一起,方便后期做数据统计
减轻DBA维护工作量。
⛳️ 2.多源复制使用场景
Backing up multiple servers to a single server.
Merging table shards.
Consolidating data from multiple servers to a single server.
如上图,多源复制采用多通道的模式,和普通的复制相比,就是使用 FOR CHANNEL进行了分离。
CHANGE MASTERTO....FORCHANNEL'm1';
CHANGE MASTERTO....FORCHANNEL'm2';
要开启多源复制功能必须需要在从库上设置 master-info-repository 和 relay-log-info-repository 这两个参数。
这两个参数是用来存储同步信息的,可以设置的值为 FILE 和 TABLE,5.7默认值是 FILE。
比如 master-info 就保存在 master.info 文件中,
relay-log-info 保存在 relay-log.info 文件中,
如果服务器意外关闭,正确的 relay-log-info 没有来得及更新到 relay-log.info 文件,这样会造成数据丢失。
为了数据更加安全,通常设为 TABLE。这些表都是 innodb 类型的,支持事务。
相对文件存储安全得多。在 MySQL 库下可以看见这两个表信息,分别是 mysql.slave_master_info 和 mysql.slave_relay_log_info。
这两个参数也是可以动态调整的。
SET GLOBAL master_info_repository='TABLE';
SET GLOBAL relay_log_info_repository='TABLE';
⛳️ 3.多源复制部署
搭建过程支持GTID复制模式和binlog+position方式复制。
✨ 3.1 下载镜像
docker pull mysql:8.0.27
--docker network create --subnet=172.72.0.0/24