CentOS7 MySQL8 主从环境搭建

前言

MySQL 版本:8.0.23
下载地址更高版本

注意系统版本,可通过uname -a查询!!!

将下载好的mysql-8.0.23-1.el7.x86_64.rpm-bundle.tar解压,
并将一下rpm包上传至服务器备用

[root@master huitian]# ll -h /home/huitian
总用量 572M
-rw-r--r--. 1 root root  48M 12月 12 21:09 mysql-community-client-8.0.23-1.el7.x86_64.rpm
-rw-r--r--. 1 root root 237K 12月 12 21:09 mysql-community-client-plugins-8.0.23-1.el7.x86_64.rpm
-rw-r--r--. 1 root root 621K 12月 12 21:09 mysql-community-common-8.0.23-1.el7.x86_64.rpm
-rw-r--r--. 1 root root 4.7M 12月 12 21:09 mysql-community-libs-8.0.23-1.el7.x86_64.rpm
-rw-r--r--. 1 root root 519M 12月 12 21:10 mysql-community-server-8.0.23-1.el7.x86_64.rpm

部署规划:

[root@master]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.3.140   master
192.168.3.141   slave

开启防火墙的3306端口

# 添加
[root@master ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
success
# 重新载入
[root@master ~]# firewall-cmd --reload
success
# 查看
[root@master ~]# firewall-cmd --zone=public --query-port=3306/tcp
yes

清理CentOS自带的mysql数据库

  1. 查找出系统安装的mysql软件包和依赖包
[root@master ~]# rpm -qa | grep mysql
[root@master ~]# 

我的机器上没有查出已安装的mysql软件包,如果有查询出对应的软件包,则使用如下命令进行删除

[root@master ~]# yum -y remove 软件包名
  1. 查找出系统安装的MariaDB软件包和依赖包

MariaDB是mysql的一个分支,所以MySQL可能会和MariaDB文件有冲突,所以依然需要继续下载掉MariaDB.

[root@master ~]# rpm -qa | grep mariadb

可能的结果如下:

mariadb-libs-5.5.68-1.el7.x86_64

使用如下命令进行删除

[root@master ~]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64

接下来查询mysql的配置文件

[root@master ~]# find / -name mysql

我本机显示的结果如下:

/usr/lib64/mysql
/etc/selinux/targeted/active/modules/100/mysql

使用如下命令进行清除:

[root@master ~]# rm -rf /usr/lib64/mysql
[root@master ~]# rm -rf /etc/selinux/targeted/active/modules/100/mysql

安装MySQL8

进入之前上传安装包的目录,执行安装命令(注意顺序):

[root@master huitian]# rpm -ivh mysql-community-common-8.0.23-1.el7.x86_64.rpm
[root@master huitian]# rpm -ivh mysql-community-client-plugins-8.0.23-1.el7.x86_64.rpm
[root@master huitian]# rpm -ivh mysql-community-libs-8.0.23-1.el7.x86_64.rpm
[root@master huitian]# rpm -ivh mysql-community-client-8.0.23-1.el7.x86_64.rpm
[root@master huitian]# rpm -ivh mysql-community-server-8.0.23-1.el7.x86_64.rpm

数据库初始化

[root@master ~]# mysqld --initialize --user=mysql --lower-case-table-names=1 --basedir=/home/mysql --datadir=/home/mysql/data
[root@master ~]# chown mysql:mysql /home/mysql -R
[root@master ~]# chown mysql:mysql /var/lib/mysql -R

注意

  • lower-case-table-names: MySQL8 默认大小写敏感,值1即可忽略
  • basedir:基本目录
  • datadir:数据目录

启动MySQL,并设置开机自启

[root@master ~]# systemctl restart mysqld.service && systemctl enable mysqld

检查MySQL启动状态

[root@master ~]# systemctl status mysqld.service
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since 三 2021-01-27 01:08:54 CST; 25s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 15559 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 15603 (mysqld)
   Status: "Server is operational"
    Tasks: 38
   CGroup: /system.slice/mysqld.service
           └─15603 /usr/sbin/mysqld

可以看到Active是active(running)表示MySQL正在运行

安装完成接下来准备登陆mysql,但是还不知道密码,所以需要先查询mysql预设的root密码

[root@master ~]# grep "password" /var/log/mysqld.log
2021-01-26T17:06:01.232072Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: WMWhXk+HI8es

那么我本机的密码就是WMWhXk+HI8es

登陆数据库

[root@master ~]# mysql -u root -p

修改root用户的密码123456

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

创建操作用户

mysql> create user 'lottery'@'%' identified by '123456';
mysql> create user 'survey'@'%' identified by '123456';

自此CentOS安装MySQL8就完成了,另一台服务器也按照同样的方法进行安装即可

配置主服务器 master

  1. 首先我们在master上创建两个测试数据库 lotterysurvey
mysql> create database lottery default character set utf8 collate utf8_general_ci;
mysql> create database survey default character set utf8 collate utf8_general_ci;
  1. 授权survey数据库给之前创建的lotterysurvey用户
mysql> grant all privileges on lottery.* to 'lottery'@'%';
mysql> grant all privileges on survey.* to 'survey'@'%';

3.接下来编辑主服务器下的/etc/my.cnf文件,修改MySQL配置

[root@master ~]# cp /etc/my.cnf /etc/my.cnf.bak
[root@master ~]# vim /etc/my.cnf

然后在[mysqld]下方添加如下配置

# 配置默认编码为utf8
character_set_server=utf8
init_connect='SET NAMES utf8'

# 主从配置
# 要给从机同步的库
binlog-do-db=survey
binlog-do-db=lottery

# 不给从机同步的库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys

# 自动清理30天前的log文件
expire_logs_days=30

# 启用二进制日志
log-bin=mysql-bin

# 服务器唯一ID,一般用服务器内网IP最后一段
server-id=140
  1. 然后重启mysql服务已使配置生效
[root@master ~]# systemctl restart mysqld
  1. 重启之后从新连接进入数据库查看log_bin是否成功开启:
mysql> show variables like '%log_bin%';

如下图所示:
在这里插入图片描述

  1. 接下来创建一个backup用户并授权用于同步数据
mysql> create user 'backup'@'%' IDENTIFIED BY '123456';
mysql> grant file on *.* to 'backup'@'%';
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%';
  1. 然后查询主服务器的状态(后面配置从服务器需要主服务器的日志名称position号)
mysql> show master status;

查询结果如下图所示:
在这里插入图片描述

配置从服务器 slave

同样的我们先添加lotterysurvey数据库并授权给lotterysurvey用户

mysql> create database lottery default character set utf8 collate utf8_general_ci;
mysql> create database survey default character set utf8 collate utf8_general_ci;
mysql> grant all privileges on lottery.* to 'lottery'@'%';
mysql> grant all privileges on survey.* to 'survey'@'%';
  1. 接下来编辑从服务器下的/etc/my.cnf文件,修改MySQL配置
[root@slave ~]# vim /etc/my.cnf
# 加上以下参数可以避免更新不及时,SLAVE 重启后导致的主从复制出错。
read_only = 1
master_info_repository=TABLE
relay_log_info_repository=TABLE
# 配置从服务器
server-id=141
  1. 然后重启mysql服务已使配置生效
[root@slave ~]# systemctl restart mysqld
  1. 在从服务器上设置主服务器,记得在从服务器的host中添加master主服务器ip
mysql> change master to master_host='master',master_port=3306,master_user='backup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=921;
Query OK, 0 rows affected, 9 warnings (0.67 sec)
  1. 设置完成后查看服务器状态
# 开启同步
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.09 sec)
# 查看从服务器状态
mysql> show slave status\G

如下图所示,则表示配置主从成功

  • Slave_IO_Runningyes
  • Slave_SQL_Running也为yes
    在这里插入图片描述

如果配置完成之后发现Slave_IO_Running为NO或者Slave_SQL_Running为NO,则可以从Last_IO_Error或者Last_SQL_Errno查看错误原因。

常见失败原因分析

连接超时

检查两台机器网络是否连通,首先使用ping命令,如果是可以ping通的,在从服务器使用MySQL远程登录命令登录主服务器的backup用户

[root@slave ~]# mysql -h master -ubackup -p

如果可以ping通,却连接不上,需要检查主服务器的防火墙是否成功关闭,且backup用户的host为’%’,如果可以连接上,配置也没有问题的话可以尝试重启主服务器的Mysql,然后重启从服务器的MySQL

[root@slave ~]# systemctl restart mysqld

如果重启还是连接不上,可以尝试重新开启同步

mysql> stop slave;
mysql> start slave;
创建backup用户失败

在失败后重新在从服务器配置主服务器之后导致Last_SQL_Errno报错创建backup用户失败,则需要检查从服务器是否已经有backup用户了

mysql> use mysql;
mysql> select user from user;

如果查询出来确实有backup用户,则删除掉backup用户,并刷新权限

mysql> delete from user where user = 'backup';
mysql> flush privileges;

如果没有backup用户(已经删除了)却仍然报此错误,则可能是没有刷新权限导致的,可以尝试重新刷新一下权限试试

mysql> flush privileges;

至此,CentOS7 下 MySQL8 主从配置结束。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值