在CentOS7中搭建MySQL主从

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在CentOS7中搭建MySQL主从相关的知识,希望对你有一定的参考价值。

笔记内容:

  • 17.1 mysql主从介绍

  • 17.2 准备工作

  • 17.3 配置主

  • 17.4 配置从

  • 17.5 测试主从同步

笔记日期:2017-11-08


17.1 MySQL主从介绍

技术分享

Mysql Replication(MySQL主从复制)是MySQL数据库使用率非常高的一种技术,它使用某个数据库服务器为主,然后在其他数据库服务器上进行复制,后面复制的数据库也称从数据库。

MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。在设置链式复制服务器时,从服务器本身也可以充当主服务器,如:a->b->c,b对于a来说是从服务器,但是它又是c的主服务器。

注意:“主从”和“集群”是有区别的,一般刚接触这些概念的初学者很容易混淆。

技术分享

简单来说,对主机器进行写入操作时会生成一个binlog文件,这个文件记录了主机器的更改操作,主机器会把binlog通过I/O流线程传输到从机器上。然后这个I/O线程会在从机器上生成一个relaylog文件,这个文件里就是记录了一些sql语句,接着就会执行relaylog里的sql语句,这样就达到了主从的数据同步。

主从一般应用于这两个场景:第一个是数据备份,然后是作为从库使用,从库可以分担主库的读取压力,但是从库不可写。





17.2 准备工作

技术分享

首先得准备两台机器,一台作为主,一台作为从:

技术分享

我这里是study01作为主机器,study02作为从机器。


这两台机器都需要安装mysql(我这里只演示其中一台,因为安装方法都是一样的):

因为之前安装了mysql,所以我得先卸载:

技术分享


还需要删除库文件目录:

rm -rf /data/mysql/*


卸载完后,下载mysql的二进制包,下载地址:

http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz

技术分享


下载好后解压

tar -zxfv mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz


解压后将目录移动到/usr/local/下,并重新命名为mysql:

mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql


进入到mysql目录下:

cd /usr/local/mysql


如果你的系统没有/data/目录需要先创建:

mkdir /data/


如果你的系统没有myysql用户也需要先创建:

useradd mysql


执行初始化脚本:

./scripts/mysql_install_db --user=mysql --datadir=/data/mysql


如果出现这个错误:

技术分享

就安装:

yum install -y perl-Module-Install.noarch


如果出现这个错误:

技术分享

然后再安装:

yum install libaio* -y


拷贝配置文件:

cp support-files/my-default.cnf  /etc/my.cnf

vim /etc/my.cnf 配置文件为以下内容:

技术分享


拷贝启动脚本:

cp support-files/mysql.server /etc/init.d/mysqld

然后定义basedir和datadir的路径:

vim /etc/init.d/mysqld 脚本文件为以下内容:

技术分享


完成以上操作后启动mysql服务:

/etc/init.d/mysqld start


启动成功:

技术分享


查看一下端口是否正常监听,mysql默认端口为3306:

技术分享



将mysql加入服务列表里面去,并设置为开机启动:

chkconfig --add mysqld

chkconfig mysqld on

然后就可以用service命令去启动或关闭mysql了


安装完后的mysql是没有密码的,可以使用以下命令无需密码直接本地登录:

mysql -uroot -h127.0.0.1


登录到mysql中使用以下命令设置密码:

set password=password(‘12345‘);

技术分享


设置完密码后重启mysql,然后就可以使用设置的密码登录了:

mysql -uroot -p‘12345‘ -h127.0.0.1

技术分享





17.3 配置主

技术分享

准备好之后,开始配置主机器

  1. 修改my.cnf配置文件:

vim /etc/my.cnf


增加以下内容:

server-id=130  //定义一个id

log_bin=study1  //定义binlog文件的前缀

技术分享


  1. 修改完配置文件后,重启mysqld服务:

service mysqld restart


然后可以在/data/mysql 目录下看到多了这几个文件:

技术分享

前缀为study1的文件是主从配置的核心文件。


  1. 把mysql库备份并恢复成testdata库,作为测试数据,备份:

mysqldump -uroot -p‘12345‘ mysql > /tmp/mysql.sql

技术分享


创建一个新的库:

mysql -uroot -p‘12345‘ -e "create database testdata"


将备份的数据恢复到这个新的库中:

mysql -uroot -p‘12345‘ testdata < /tmp/mysql.sql


完成以上操作后,现在主从参考的库就是testdata库,现在可以看到study1.000001这个文件大小和刚刚那个备份文件的大小几乎是一致的,所以看得出来这个study1.000001文件里记录着的内容就是这个testdata库:

技术分享



  1. 创建用作同步数据的用户:

grant replication slave on *.* to ‘repl‘@‘192.168.77.128‘ identified by ‘12345‘;

技术分享


  1. 锁表,锁表就是禁止这个别被操作,不让这个表有任何的改动,这样一会才能配置从实现同步:

flush tables with read lock;

技术分享


  1. 看一下主的状态,一会要用到:

show master status;

技术分享


  1. 将除了mysql之外的库都备份一下:

技术分享

mysqldump -uroot -p‘12345‘ mysql > /tmp/mysql2.sql

mysqldump -uroot -p‘12345‘ mysql > /tmp/zrlog.sql

mysqldump -uroot -p‘12345‘ mysql > /tmp/test.sql

mysqldump -uroot -p‘12345‘ mysql > /tmp/testdata.sql

mysqldump -uroot -p‘12345‘ mysql > /tmp/performance_schema.sql

技术分享





17.4 配置从

技术分享

1. 同样的从上也要修改my.cnf配置文件:

vim /etc/my.cnf

只不过在主上只需要增加一个server-id即可:

技术分享


  1. 重启mysqld服务:

service mysqld restart


  1. 把主上tmp目录下的备份文件都同步到从上,命令如下:

scp 192.168.77.130:/tmp/*.sql /tmp/

技术分享


  1. 登录到mysql中创建与备份文件相应的库,我这里就不逐一去创建了,仅示例其中几个:

技术分享



  1. 将同步的备份文件恢复到对应的数据库中:

mysql -uroot -h127.0.0.1 -p‘12345‘ zrlog< /tmp/zrlog.sql

mysql -uroot -h127.0.0.1 -p‘12345‘ user< /tmp/user.sql

mysql -uroot -h127.0.0.1 -p‘12345‘ testdata< /tmp/testdata.sql

技术分享

在实际情况中,需要把所有的除了mysql库之外的库都进行同步,由于是实验演示,我这里没有进行全部备份,因为操作都是一样的,也不需要过多的演示。


  1. 同步完成后,开始实现主从,这一步需要登录mysql:

执行以下两个命令:

stop slave;

change master to master_host=‘192.168.77.130‘, master_user=‘repl‘, master_password=‘12345‘, master_log_file=‘study1.000001‘, master_log_pos=661506;

技术分享

解释一下这命令中的参数:

master_host  定义主机器的ip地址

master_user  定义主机器中给从机器使用的用户名

master_password 定义用户的密码

master_log_file 定义主机器上binlog文件的名称

master_log_pos  定义主机器上binlog文件的位置

其中master_log_file 和master_log_pos参数中的值可以在主机器上的mysql中查看到:

技术分享


  1. 接着就是启动slave:

start slave;

技术分享


8. 启动后执行以下命令查看是否能够正常连接主机器:

show slave status\G

技术分享




关于其他的几个参数:

技术分享



  1. 到主机器上,把刚刚把表解锁,命令如下:

unlock tables;

技术分享


以上步骤都没有出现问题的话,那么mysql的主从就搭建完成了。

如果Slave_IO_Running和 Slave_SQL_Running显示为No或者Connecting的话,主要是由以下几个原因导致的:

  • 用户密码错误

  • POS错误(master_log_pos)

  • 网络不通

  • 防火墙规则

  • 端口没有放行

  • ID问题(server-id)


还有就是检查你执行的change master命令里的参数指定的值是否有写错,出现这种问题后一般首要就是排除这些配置的信息有没有问题,确定没有问题后,一般就是系统的问题了,比如设有防火墙规则,或者端口不通等等。






17.5 测试主从同步

技术分享

上图介绍的这几个参数是在change命令上使用的,也就是说当你使用change命令的时候,可以根据需求去使用这些参数来定义相关的配置信息。


以上我们mysql的主从搭建完成了,之后就是测试出从是否能够正常同步了:




技术分享

在主机器上查看某个已经同步的表:

技术分享


在从机器上也查看一下这个表:

技术分享


可以看到两个机器上的数据是一致的。接着在主机器上把这个表给清空:

技术分享


然后再到从机器上去看:

技术分享

如图,这个表也是空的,证明数据已经同步了。


在主机器上drop掉这个表:

技术分享


在从机器上看看是否还能select到这个表:

技术分享

如图,这个表已经被删掉了,所以select就会出错。


继续到主机器上drop,这次把整个testdata库给drop掉:

技术分享


同样的到从机器上看看是否还有这个库:

技术分享

结果如图,则测试完成,没有问题。


提示:从机器的数据库是不能做任何的修改操作的,因为会导致数据不同步了,如果你小心在从机器上执行了修改的操作,但是数据还是一致的话,那么关掉slave,再执行change命令即可。 反之,如果数据已经不一致了,只能重新备份搭建主从了。




如果遇到主从不能正常同步,提示uuid相同的错误。这是因为克隆机器导致:

https://www.2cto.com/database/201412/364479.html


本文出自 “zero” 博客,请务必保留此出处http://zero01.blog.51cto.com/12831981/1980082

以上是关于在CentOS7中搭建MySQL主从的主要内容,如果未能解决你的问题,请参考以下文章

Centos7搭建基于GTID的MySQL主从复制架构

mysql-主从搭建

mysql 高性能搭建1: Centos7+Mysql7.5搭建主从复制

Linux—Centos7.4之搭建Mysql数据库主从同步读写分离

Centos7.5 生产环境搭建MySQL 5.7主从

使用Docker搭建MySQL主从