• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

MySQL 5.7:多源复制实践

MySQL 5.7 彭东稳 8年前 (2016-11-22) 29355次浏览 已收录 0个评论

一、前言

MySQL 5.7的发布,在复制方面有了很大的改进,比如开始支持多源复制(multi-source)了。以及真正的支持多线程复制了。需要说明一点的是,多源复制可以使用基于二进制日志的复制或者基于事务的复制。下面开始配置基于二进制日志的多源复制。

什么是多源复制?

首先,我们需要清楚几种常见的复制模式:

1)一主一从

2)一主多从

3)级联复制

4)Multi-master

但从MySQL 5.7已经开始又支持了一种复制方式,就是多源复制。MySQL 5.7之前只能实现一主一从、一主多从或者多主多从的复制,如果想实现多主一从的复制,只好使用MariaDB,但是MariaDB又与官方的MySQL版本不兼容的,在MySQL 5.7版本已经可以实现多主一从的复制了。MySQL 5.7版本相比之前的版本,无论在功能还是性能、安全等方面都已经提升了不少,值得大家去研究和使用。

比较常用的场景就是数据分析用,个人多源复制就是使用在数据分析场景中,数据分析部门需要同步其他多个业务的数据库信息到同一个数据库中。

注意,其中multi-master与multi-source复制不是一样的。Multi-Master复制通常是环形复制,你可以在任意主机上将数据复制给其他主机。Multi-source是不同的,简单的说,多源复制就是将多个主的库同步到一个从库上面,从而增加从的利用率,出节省了机器,也可用于备份。如下图:

MySQL 5.7:多源复制实践

多源复制的作用?

那么多源复制有什么作用呢?说这么几种我在生产环境中碰到的情况吧。

第一种,一般企业内大数据部门会需要各个业务部门的部分数据做数据分析,这个时候就可以用到多源复制把各个主数据库的数据复制到统一的大数据数据库中。

第二种,搜索部门需要其他部门的数据做用户搜索匹配。

第三种、在从服务器进行数据汇总,如果我们的主服务器进行了分库分表的操作,为了实现后期的一些数据统计功能,往往需要把数据汇总在一起再统计。

第四种、如果我们想在从服务器时时对主服务器的数据进行备份,在MySQL 5.7之前每一个主服务器都需要一个从服务器,这样很容易造成资源浪费,同时也加大了DBA的维护成本,但MySQL 5.7引入多源复制,可以把多个主服务器的数据同步到一个从服务器进行备份。

使用多源复制的必要条件?

不管是使用基于二进制日志的复制或者基于事务的复制,要开启多源复制功能,必须需要在从库上首先设置master_info_repository和relay_log_info_repository两个参数为’TABLE’(在mysql库下可以看见这两个表信息),是用来存储同步信息的,可以设置的值为’FILE’和’TABLE’,默认是FILE。

这两个参数都是可以动态调整的。

如果SLAVE为开启着,那么需要首先关闭SLAVE(STOP SLAVE;)。

我这边为了测试,所以只是在同一台机器上面开启了3个实例,MySQL版本为5.7.16。

二、安装MySQL 5.7.16

详情可看:MySQL 5.7多方式安装

首先从MySQL官方网站下载YUM源,地址:http://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/

这里我选择MySQL 5.7的源进行安装MySQL 5.7,手动添加一个YUM源。

检查一下mysql repo

安装启动配置MySQL

MySQL 5.7以及安装完成了,为了简便,我这里使用多实例的方式进行测试在线变更复制类型,开两个端口3306和3307。

首先创建一些标准目录。

下面开始进行初始化操作。

看一下初始化后的目录文件,如下:

三、启动多实例

1)给每个实例提供配置文件

给3306(master)实例提供一份配置文,如下:

给3307(slave)实例提供一份配置文件,如下:

给3308(slave)实例提供一份配置文件,如下:

PS:配置文件很清楚,如果想使用GTID,开启对应的参数即可。

重新赋予一下权限

2)启动多实例

PS:进入MySQL需要使用-S指定各自的mysql.sock文件。

3)主库(3306,3307)创建具有复制权限的用户

4)从库(3308)连接至主库 (3306,3307)

现在我们有了通信渠道的概念,每一个通信渠道都是一个从服务器从主服务器获得二进制日志的链接。这意味着每个通信渠道都得有一个IO_THREAD。我们需要运行不同的”CHANGE MASTER”命令, 对于每一个主服务器。我们需要用到”FOR CHANNEL”这个参数来提供通信链接的名字。

下面开始设置同步的源,同步3306和3307。

CHANGE MASTER 3306

CHANGE MASTER 3307

5)启动所有SLAVE

或者

停止和RESET复制的命令也同START类似,可以操作所有的,也可以操作单个通道。

如果想删除某个源,命令如下:

6)查看SLAVE信息

7)测试多源复制

首先在3306(主库)实例创建一些数据。

然后在3307(主库)实例创建一些数据。

然后再3308(从库)实例看数据是否复制过来了。

由于做了复制过滤,所以创建其他的库或者是表,都无法再从库重现的。你可以自行测试。

8)查看复制管理视图

在performance_schema库中,提供了复制相关的一些视图,可供查看复制相关的信息。

有多源通道的配置信息和多源通道的状态信息,另外有连接配置信息和连接状态信息,如果配置了多线程复制的话,还会有多线程配置信息和多线程状态信息。

多源库使用跟主从复制基本一样,特别有一点需要注意的就是同一个多源库中不能有相同名称的库名,MySQL并没有做什么冲突检测机制。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (6)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!