MySQL 5.7发布后,在复制方面有了很大的改进和提升。比如开始支持多源复制(multi-source)以及真正的支持多线程复制了。多源复制可以使用基于二进制日子的复制或者基于事务的复制。下面我们说一说如何配置基于二进制日志的多源复制。
什么是多源复制???首先,我们要清楚几种常见的复制模式:
一主一从
一主多从
级联复制
multi-master
MySQL 5.7 之前只能支持一主一从,一主多从或者多主多从的复制。如果想实现多主一从的复制 只能使用mariadb,但是mariadb又与官方的mysql版本不兼容。
MySQL 5.7 开始支持了多主一从的复制方式也就是多源复制。MySQL 5.7 版本相比之前的版本,无论是功能还是性能还是安全等方面都已经有了不少的提升。
首先我们要清楚multi-master OR multi-source 复制不是一样的。multi-master复制通常是环形的复制,可以在任意的主机上将数据复制给其他的主机。如图:
multi-source 是不同的。简单的说,多源复制就是将多个主库同步到一个从库,从而增加从的利用率,节省了机器。如图:
多源复制的使用场景数据分析部门会需要各个业务部门的部分数据做数据分析,这个时候就可以使用到多源复制把各个主数据库的数据复制到统一的数据库中
在从服务器进行数据的汇总,如果我们的主服务器进行了分库分表的操作,为了实现后期的一些数据的统计功能,往往要把数据汇总在一起在进行统计
在从服务器对所有主服务器的数据进行备份,在MySQL 5.7之前每个主服务器都需要一台从服务器,这样很容易造成资源的浪费,同时也加大了DBA的维护成本,但MySQL 5.7引入的多源复制,可以把多个主服务器的数据同步到一台从服务器进行备份。
使用多源复制的必要条件不管是使用基于二进制日志的复制或者基于事务的复制,要开启多源复制功能必须要在从库上设置master-info-repository AND relay-log-info-repository 这两个参数。
这两个参数是用来存储同步信息的,可以设置的值为FILE和TABLE,默认是FILE。比如master-info就保存在master.info文件中,relay-log-info保存在relay-log.inf文件中服务器如果意外关闭,正确的relay-log-info没有来的及更新带relay-log.info文件,这样就会造成数据的丢失。
为了数据更加安全,通常设置为TABLE。这些表都是innodb类型的,支持事务。相对文件存储安全得多。在MySQL库下可以看到这两个表的信息,分别是mysql.slave_master_info AND mysql.slave_relay_log_info 。
这两个参数也是可以动态调整的。
SET GLOBAL master_info_repository = 'TABLE';
SET GLOBAL relay_log_info_repository = 'TABLE';
如果要启用enhanced multi-threaded slave(多线程复制),可以设置一下参数
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=8
relay_log_recovery=ON
如果SLAVE已经为开启状态,那么需要首先关闭SLAVE(stop slave;)
配置多源复制 环境准备:hostname
IP
mysql
dev-master-01
192.168.1.131
master
dev_node-01
192.168.1.132
master
dev-node-02
192.168.1.133
slave
安装MySQL 5.7版本:
可参考官方文档:https://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html
MySQL 5.7软件包下载地址:https://dev.mysql.com/downloads/repo/yum/
下载yum源rpm安装包:wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
安装yum源:yum localinstall mysql57-community-release-el7-11.noarch.rpm
检查mysql源是否安装成功:yum repolist enable | grep "mysql.*-community.*"
安装MySqL:yum install mysql-community-server
启动MySQL服务:systemctl start mysqld
查看MySQL的启动状态:systemctl status mysqld
设置开机自启:systemctl enable mysqld ----> systemctl daemon-reload
修改root默认密码(这里出现了一些小问题)下面做问题的阐述
在修改密码的过程中出现了和官网上说法不一致的问题
官网的说法:mysql安装完成后,在/var/log/mysqld.log文件中给root生成一个默认的密码,通过下面的方式可以找到root的默认密码,然后登录mysql进行修改:
找密码:grep 'temporary password' /var/log/mysqld.log
登录mysql:mysql -uroot -p
修改密码:ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!'