设为首页 加入收藏

TOP

MySQL 5.7多源复制配置详解(一)
2018-11-26 18:10:49 】 浏览:188
Tags:MySQL 5.7 复制 配置 详解

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;)


可参考官方文档: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!'


注意:MySQL的 validate_password 插件默认安装。这将要求密码至少包含一个大写字母,一个小写字母,一位数字和一个特殊字符,并且总密码长度至少为8个字符。


使用官方提供的找密码的命令根本就在mysqld.log文件中找不到默认的密码,只能想办法自己解决mysql的密码的问题了 尝试了一些mysql5.7之前的版本的修改密码的方法但是还是不可行,但是最后还是想到了一种相当简单的方法:


 修改/etc/my.cnf 在[mysqld]下面添加 skip-grant-tables=1 这一行配置 让mysql启动的时候不对密码进行验证


 重启mysqld服务:systemctl restart mysqld


 使用root用户登录到mysql:mysql -uroot


 切换到mysql数据库:use mysql;


 更新user表:UPDATE user SET authentication_string = PASSWORD('sycx_2009abc') WHERE user = 'root';


 使修改后生效:FLUSH PRIVILEGES;


 退出mysql,编辑/etc/my.cnf文件 注释掉skip-grant-tables=1


 重启mysqld服务,再用新密码登录即可


上面我们已经把MySQL 5.7版本的mysql安装成功了 现在我们只要修改my.cnf配置文件重启mysql验证多源复制即可。步骤如下:


 修改192.168.1.131和192.168.1.132下面的/etc/my.cnf文件,修改如下:记得修改配置参数中的server-id(192.168.1.131为1,那么192。168.1.132就得是2,每台服务器中的这个id不能一样,切记!!!)


[mysqld]
# 指定端口 不指定默认3306
#por

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇MySQL 优化配置参数(my.cnf) 下一篇MySQL事务及其实现

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目