MySQL 5.7有一个新特性,即支持多源复制,这个功能在有些场景下还是很有用的。
首先什么是多源复制呢?摘录开源中国社区中的一段说明:
“MySQL在这个新版本中修复了一个复制限制 , 这限制是一个从站只能有一个主站. 这是一个在我们设计复制环境中的限制因素,也有一些极客使它正常工作了。但是现在有一个官方的解决办法了。所以。简单的说, Multi-Source 意味着一个从站能有一个以上主站. 现在, 像下图一样的复制环境是可能的”
也就是说,我们可以在一个实例上(slave),访问多个实例的内容(master *)。
关于具体的说明和使用方法,可参见开源中国社区的翻译文章:MySQL 5.7 的多源复制
接下来说使用场景,我们业务有多个模块,每个模块都有一个独立的数据库实例。为了便于开发、产品统计数据或排查问题,同时又不影响线上使用,又对应配置了离线库(同步主库,低延时)。由于历史原因,这些离线库的实例分散在各个集群中,而一些分析需求(各种导数据)需要多个实例中表的数据。
以前的实现方式是每次查询一个实例,中间结果放到文件中,最后通过sed、awk等进行处理。
现在有了多源复制功能,我们就可以通过一个库,访问到所有业务库的数据,再也不用担心跨实例查询的问题了。
与dba交流了下,对于多源复制,还是有些东西要注意的(有说的不对的请指正):
1. 初次配置耗时较长,需要将各个“master”的数据dump下来,再source到“slave”上;
2. 需要考虑各“master”数据增长频率,“slave”的数据增长频率是这些的总和,如果太高,会导致大量的磁盘IO,造成数据更新延迟,最严重的是会影响正常的查询;
3. 如果多实例中存在同名的库,则同名库的表都会放到一个库中;
4. 如果同名库中的表名相同且结构相同,则数据会到一起;如果结构不同,则先建的有效。