Linux环境MySQL数据库主从复制保姆级教程

1、环境准备

本文主要是针对MySQL数据库做个主从复制测试,环境是Linux(在阿里云领取的免费服务器,可以试用一个月),MySQL数据库的版本我这里是5.7.40

主库IP:120.26.60.94

从库IP:120.27.241.69

1.1、安装MySQL

我这里安装的版本是5.7.40

首先进入opt目录,执行下面命令进行下载:

wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

然后执行下面命令进行安装:

rpm -ivh mysql57-community-release-el7-9.noarch.rpm

执行完成后会在/etc/yum.repos.d/目录下生成两个repo文件mysql-community.repo mysql-community-source.repo

必须进入到 /etc/yum.repos.d/目录后再执行安装

cd /etc/yum.repos.d/
yum install mysql-server --nogpgcheck      //nogpgcheck表示不校验key

下面就表示安装成功了

在这里插入图片描述

运行下面命令进行启动:

systemctl start mysqld

设置开机自动启动:

systemctl enable mysqld

其他命令:

# 关闭开机启动
systemctl stop mysqld
# 关闭MySQL
systemctl stop mysqld
# 重启MySQL
systemctl restart mysqld

运行下面命令查看MySQL运行状态:

systemctl status mysqld

如下:

在这里插入图片描述

1.2、设置root登录密码

那么如何设置root账户的登录密码呢?可按照下面步骤修改root账户密码:

1、进入MySQL数据配置文件进行修改

vi /etc/my.cnf

再按字母【i】进入编辑模式,然后将下面这一行拷贝进去,放到最后一行,含义是免密码登录

skip-grant-tables

然后按【Esc】后再输入【:wq】,表示保存并退出

然后重启:

systemctl restart mysqld.service

2、直接免密登录

mysql -uroot -p

此时提示要你输入密码,什么都不用输入,直接回车就可以进入数据库了

3、设置密码

你可以使用以下命令来重置root账户的密码:(我这里设置的是AaBa123456,设置最好不要设置的太简单)

5.7以上版本运行:
update user set password= password("123456")where user='root';

5.7以下版本运行:
update user set authentication_string= password("123456")where user='root';

4、删除免密设置

按照刚才的步骤,进入【my.cnf】文件中,将【skip-grant-tables】代码删除,并保存退出,再重启MySQL服务器即可,这样以后就可以使用123456这个密码进行登录了

2、主库配置

下面所有配置都是在主库中进行的

2.1、修改my.cnf

执行下面命令:

vi /etc/my.cnf

然后按字母【i】进入编辑模式,将下面内容拷贝进去即可:(拷贝到【mysqld】节点下面)

[mysqld]
#开启log-bin二进制日志
log-bin=mysql-bin

#配置唯一的服务器ID,一般使用IP最后一位
server-id=94

#添加,允许从服务器更新二进制日志
log-slave-updates=true

#需要同步的数据库,如果有多个,复制多份指定数据库名即可
binlog_do_db=testdb
#不需要同步的数据库,如果有多个,复制多份指定数据库名即可
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys

#下面不是必须配置
#主要是为了使用带事务的InnoDB进行复制设置时尽可能提高持久性和一致性
innodb_flush_log_at_trx_commit = 1
#使binlog在每1次binlog写入后与硬盘同步
sync_binlog = 1
#只保留7天的二进制日志,以防磁盘被日志占满
expire-logs-days=7

在这里插入图片描述

然后按【Esc】后,再按【:wq】进行保存并退出操作

2.2、重启数据库

修改完配置文件后需要重启数据库,并查看配置是否生效,执行下面命令进行重启:

systemctl restart mysqld.service

然后在输入下面命令查看MySQL重启后的运行状态:

systemctl status mysqld

在这里插入图片描述

OK,到此主库设置完毕

2.3、检验设置是否成功

先使用下面命令登录数据库:

mysql -uroot -p123456

登录成功后输入下面命令检查:

show variables like 'server_id';

在这里插入图片描述

再输入命令:

show variables like 'log_bin';

在这里插入图片描述

再输入命令:

#skip_networking默认是OFF关闭状态,启用后,主从服务器将无法相互通信,所以这里必须是OFFer
show variables like '%skip_networking%';

在这里插入图片描述

OK,全部检查完毕,确实设置成功了

2.4、建立主从复制的账号

同样先登录MySQL之后,执行下面命令:

GRANT REPLICATION SLAVE ON *.* to 'slavetest'@'%' identified by 'root@123456';

注意:

上面SQL的作用是创建一个用户【slavetest】密码为【root@123456】并且给【slavetest】用户授予REPLICATION SLAVE权限,常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制,如下:

在这里插入图片描述

然后执行下面命令:

#查看master的状态
show master status\G

在这里插入图片描述

就不用再执行其他命令了

上面结果中的File和Position的值需要记录一下,待会要用到

主库的配置就搞完了,都已经做好准备了,下面我们开始搞从库

3、从库配置

先在从库上执行下面语句检查下刚刚建立的账号是否可以连接

#IP是主库IP
mysql -uslavetest -p'root@123456' -h120.26.60.94

在这里插入图片描述

确定可以连接

3.1、配置my.cnf

执行下面命令编辑my.cnf

vi /etc/my.cnf

然后在【mysqld】节点下面新增下面内容:

#配置唯一的服务器ID,一般使用IP最后一位
server-id=69

如下:

在这里插入图片描述

然后重启数据库,并查看刚配置的是否生效:

systemctl restart mysqld
mysql -uroot -p123456
show variables like 'server_id';
show variables like 'log_bin';

如果报错:

在这里插入图片描述

那就执行:

ALTER USER USER() IDENTIFIED BY 'Admin2023!';

就可以了执行了:

在这里插入图片描述

在这里插入图片描述

3.2、配置复制参数

配置同步,注意 MASTER_LOG_FILE 和 MASTER_LOG_POS 的值要与Master的一致,登录MySQL后运行下面语句:

CHANGE MASTER TO MASTER_HOST='120.26.60.94',MASTER_USER='slavetest',MASTER_PASSWORD='root@123456',MASTER_LOG_FILE='mysql-bin.000005',MASTER_LOG_POS=434;

下面是主库的参数:

在这里插入图片描述

在这里插入图片描述

如果执行失败,就执行:reset slave;

我这里执行成功了,就可以直接执行下面语句了:

start slave;

在这里插入图片描述

3.3、查看从库状态

执行下面命令查看从库状态:

show slave status\G

在这里插入图片描述

参数介绍:

# 负责与主机的io通信
Slave_IO_Running: Yes

# 负责自己的slave mysql进程
Slave_SQL_Running: Yes

若出错,则清理掉之前的配置,执行以下命令:

mysql> stop slave;
mysql> reset slave all;

4、测试

在我本地用Navicat工具连接主库和从库:

在这里插入图片描述

目前两个库都是一样的库,我现在在主库上面新建一个【testdb】数据库,然后从库直接刷新,就可以看到这个数据库了,同样的,你在主库上新建什么表,添加什么数据,刷新从库后,会发现,数据都在了,说明测试成功了,现在主从复制功能就实现了:
在这里插入图片描述

5、注意事项

如果你设置都已经设置好了,确保没有问题了,但是本机windows就是无法远程连接Linux中的MySQL服务器的话,那就需要检查下:

  1. 接口是否放行
  2. 防火墙是否关闭

一般情况下,需要检查下Linux服务器的防火墙是否关闭,然后检查端口是否放行(不放行的话其他服务器上连接不成功的)

5.1、接口放行

我这里是阿里云的服务器,所以登录到阿里云的控制台中,如下这样配置:

在这里插入图片描述

5.2、防火墙关闭

防火墙相关命令:

  • 远程访问linux时,需要关闭防火墙,否则访问linux上的tomcat,mysql等服务可能会失败;
  • 查看防火墙状态: systemctl status firewalld.service(绿的running表示防火墙开启)
  • 执行关闭命令(立即关闭 - 立即生效): systemctl stop firewalld.service
  • 再次执行查看防火墙命令:systemctl status firewalld.service
  • 执行开机禁用防火墙自启命令(永久关闭 - 重启生效): systemctl disable firewalld.service
  • 开启防火墙:systemctl start firewalld.service

5.3、Slave_IO_Running: No

一般出现这样的问题有以下几种情况,逐一检查下即可:

  • 网络不通
  • my.cnf 配置有问题
  • 密码、file 文件名、pos 偏移量不对
  • 防火墙没有关闭

6、总结

  1. 本文梳理出了在Linux环境中如何做主从复制,希望对大家有帮助

如果本文对你有帮助的话,记得点赞+关注哦

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小学生波波

感谢您的厚爱与支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值