在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

时间: 2024-11-05 23:29:02

在CentOS7中搭建MySQL主从的相关文章

搭建mysql主从服务器

搭建mysql主从服务器: //注:注释掉my.cn文件中的skip-federated字段[[email protected] ]# /bin/cp -r /usr/local/mysql/share/mysql/my-huge.cnf  /etc/my.cnf 配置主服务器:修改my.cnf文件server-id=1 //每个数据库服务器都要指定唯一一个server-id log-bin=mysql-bin //mysql进行主从复制时通过二进制日志文件来进行的,所以必须开启mysql日志功

在 CentOS7 上部署 MySQL 主从

在 CentOS7 上部署 MySQL 主从 1 通过 SecureCRT 连接至 MySQL 主服务器: 2 找到 my.cnf 文件所在的目录: mysql --help | grep my.cnf 一般情况 my.cnf 都会位于 /etc/ 目录下: 3 用 vim 打开 MySQL 的配置文件 my.cnf: vim /etc/my.cnf 4 找到 [mysqld] 并在其后添加如下配置: # 唯一标识此 MySQL 服务器,默认值为 1,一般采用所属 IP 的末端值 server-

1分钟利用mysqlreplicate快速搭建MySQL主从

利用mysqlreplicate快速搭建MySQL主从环境 简介 mysql-utilities工具集是一个集中了多种工具的合集,可以理解为是DBA的工具箱,本文介绍利用其中的mysqlreplicate工具来快速搭建MySQL主从环境. HE1:192.168.1.248 slave HE3:192.168.1.250 master 实战 Part1:安装mysql-utilities [[email protected] ~]# tar xvf mysql-utilities-1.5.4.t

搭建Mysql主从同步服务

Mysql主从同步搭建 mysql主从同步利用binlog日志中记录的sql语句实现数据同步,进而实现自动备份数据的目的. 在搭建mysql主从同步时,要求一台服务器做master即主服务器,一台服务器做slave即从服务器,slave服务器从master服务器上同步binlog日志中记录的sql语句,在本地数据库中执行这些语句来实现数据库同步的目的. 注意,在搭建mysql主从同步服务时,slave上的数据库必须与master服务器上的数据库中的库和表完全相同,即有同样的库,表且表结构完全相同

使用XtraBackup热备份搭建MySQL主从同步

使用XtraBackup热备份搭建MySQL主从同步 1 背景描述 生产环境一台MYSQL主库,没有搭建从库,急需搭建从库 每天已有innobackupex备份 2 方案 利用innobackupex全备和增量备份搭建MYSQL主库 3 数据库版本 主库:mysql 5.5.54 从库:mysql 5.7.25(为了以后升级) 4 搭建步骤 搭建的步骤如下图所示: (1)将数据库备份拷贝到从库上 (2)在从库上安装好MYSQL数据库,安装过程略 (3)停止从库的MYSQL实例,删除从库数据库里面

怎么使用mysqlreplicate快速搭建MySQL主从呢?

用其中的mysqlreplicate工具来快速搭建MySQL主从环境. HE1:192.168.1.248 slave HE3:192.168.1.250 master 实战 Part1:安装mysql-utilities [[email protected] ~]# tar xvf mysql-utilities-1.5.4.tar.gz[[email protected] ~]# cd mysql-utilities-1.5.4[[email protected] mysql-utiliti

linux下搭建mysql主从

在master上创建repl账户,用于复制. grant replication slave on *.* to 'repl'@'%' identified by '[email protected]$$W0rd'; flush privileges; 与windows下搭建mysql主从的区别: 二进制日志的路径格式不一样 master: my.cnf部分配置(master): thread_handling = pool-of-threads thread_pool_oversubscrib

在kubernetes集群中部署mysql主从

本文介绍在kubernetes环境中部署mysql主从集群,数据持久化采用nfs. 一.环境介绍Mysql版本:5.7 Mysql master节点: 主机名:vm1IP地址:192.168.115.5/24 Mysql slave节点: 主机名:vm2IP地址:192.168.115.6/24 NFS节点:主机名:vm2IP地址:192.168.115.6/24共享目录:/home/mysql_master./home/mysql_slave 二.准备mysql主从的镜像环境dockerfil

centos7中搭建ftp服务

博客搬家: centos7中搭建ftp服务 最近想和同学共享一些文件资源,于是在实验室服务器上搭建个ftp服务,本博客记录一下配置的流程.过程基本是参照别人的方法来做的,博客也是在别人博客基础上修改的,当然排除了一些坑点. 参考:https://www.cnblogs.com/jefflee168/p/6575014.html 1. 安装vsftpd 安装vsftpd: yum install vsftpd -y 启动vsftpd: systemctl start vsftpd 设置开机启动:s