CentOS7安装MySQL8并配置主从

CentOS7安装mysql主备

    • 前言
    • CentOS7安装MySQL8
      • 清理CentOS自带的mysql数据库
      • 安装MySQL8
    • 配置主服务器Master
    • 配置从服务器Slave
    • 常见失败原因分析
      • 连接超时
      • 创建backup用户失败
    • 扩展

前言

本文从以下几个方面介绍在CentOS中安装mysql8,并基于两台服务器搭建主从环境

  • CentOS7安装mysql8步骤
  • 主机配置
  • 从机配置

CentOS7安装MySQL8

清理CentOS自带的mysql数据库

  1. 查找出系统安装的mysql软件包和依赖包
rpm -qa |grep mysql

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

sudo yum remove 软件包名
  1. 由于MySQL在CentOS7中收费了,所以在CentOS7内部默认集成的数据库改为MariaDB,MariaDB是mysql的一个分支,所以MySQL可能会和MariaDB文件有冲突,所以依然需要继续下载掉MariaDB.
rpm -qa |grep mariadb

可能的结果如下:

mariadb-libs-5.5.56-2.el7.x86_64

使用如下命令进行删除

sudo rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

接下来查询mysql的配置文件

sudo find / -name mysql

我本机显示的结果如下:

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

使用如下命令进行清除:

sudo rm -rf /etc/selinux/targeted/active/modules/100/mysql
sudo rm -rf /usr/lib64/mysql

安装MySQL8

  1. 从mysql官网下载MySQL8 repo源
wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
  1. 安装yum repo并更新yum缓存
sudo yum -y install mysql80-community-release-el7-3.noarch.rpm

安装完成后会在/etc/yum.repos.d/目录下生产两个repo文件

mysql-community.repo
mysql-community-source.repo

接下来更新yum缓存

yum clean all
yum makecache

更新完成之后查询yum仓库中的mysql

yum list | grep mysql

可以看到mysql-community-server.x86_64软件包,接下来安装mysql-community-server

sudo yum -y install mysql-community-server

启动MySQL

systemctl start  mysqld.service

检查MySQL启动状态

systemctl status mysqld

可以看到Active是active(running)表示MySQL正在运行,接下来设置mysql开机自启动

systemctl enable mysqld

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

grep "password" /var/log/mysqld.log

显示结果如下:

2019-07-15T04:06:42.304918Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: f0q11Quasj*k

那么我本机的密码就是f0q11Quasj*k
登陆数据库

mysql -uroot -p

默认密码记忆难度确实有点高,这边我们登陆进去之后首先修改root的默认密码(mysql8的密码安全策略比较严格,需要包含大小写字母,数字,符号,并且长度不能少于8位)

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Purepgmr-2019';

我们再创建一个用于其他电脑连接的用户,默认root用户的host是localhost的,只有本机才能连接.

create user 'test'@'%' identified by 'Purepgmr-2019';

此时我们使用连接工具,如Navicat等进行连接,会发现连接被拒绝,原因是CentOS7自带了firewall防火墙,我们把firewall防火墙给关闭了(如果使用的是阿里云或者华为云等云服务器,直接去云控制台上开启3306端口即可,不需要关闭firewall)

systemctl stop firewalld.service

并将firewal的开机自启动给关掉

systemctl disable firewalld.service

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

配置主服务器Master

当两台服务器都安装完成后,接下来进行两个数据库的主从配置,首先我的两个服务器ip分别为10.211.55.3,10.211.55.4,在这里为了方便配置,我们修改host命名10.211.55.3node1,10.211.55.4node2,将node1作为主机.

  1. 首先我们在node1上创建一个测试数据库
create database test default character set utf8mb4 collate utf8mb4_general_ci;
  1. 授权test数据库给之前创建的test用户
grant all privileges on test.* to 'test'@'%';

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

sudo vi /etc/my.cnf

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

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

# 主从配置
# 要给从机同步的库
binlog-do-db=test
# 不给从机同步的库
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=3
  1. 然后重启mysql服务已使配置生效
systemctl restart mysqld
  1. 重启之后从新连接进入数据库查看log_bin是否成功开启:
show variables like '%log_bin%';

如下图所示:
CentOS7安装MySQL8并配置主从_第1张图片

  1. 然后查询主服务器的状态(后面配置从服务器需要主服务器的日志名称,和position号)
show master status;

查询结果如下图所示:
主服务器状态

  1. 接下来创建一个新用户并授权用于同步数据
create user 'backup'@'%' IDENTIFIED BY 'Purepgmr-2019';
grant file on *.* to 'backup'@'%';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%';

配置从服务器Slave

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

create database test default character set utf8mb4 collate utf8mb4_general_ci;
grant all privileges on test.* to 'test'@'%';
  1. 接下来编辑从服务器下的/etc/my.cnf文件,修改MySQL配置
# 配置从服务器
server-id=4
#加上以下参数可以避免更新不及时,SLAVE 重启后导致的主从复制出错。
read_only = 1
master_info_repository=TABLE
relay_log_info_repository=TABLE
  1. 然后重启mysql服务已使配置生效
systemctl restart mysqld
  1. 在从服务器上设置主服务器,记得在从服务器的host中添加node1 主服务器ip
change master to master_host='node1',master_port=3306,master_user='backup',master_password='Purepgmr-2019',master_log_file='mysql-bin.000001',master_log_pos=155; 
  1. 设置完成后查看从服务器状态
show slave status\G

如下图所示,Slave_IO_Running为yes且Slave_SQL_Running也是yes,则表示配置主从成功.
CentOS7安装MySQL8并配置主从_第2张图片
如果配置完成之后发现Slave_IO_Running为NO或者Slave_SQL_Running为NO,则可以从Last_IO_Error或者Last_SQL_Errno查看错误原因.

常见失败原因分析

连接超时

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

mysql -h node1 -ubackup -p

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

systemctl restart mysqld

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

stop slave;
start slave;

创建backup用户失败

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

use mysql;
select user from user;

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

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

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

flush privileges;

扩展

  1. 配置完成之后后面想新添加需要同步的库操作步骤:
    1.1 编辑/etc/my.cnf文件,添加binlog-do-db,然后重启数据库
    1.2 进入主服务器数据库新建数据库
    1.3 配置用户权限

至此,是我在实际开发中配置数据库主备所有的总结,因为一般主库有读写权限,而从库只有读权限,为了提高系统数据库性能,实际开发中我们一般会进行读写分离,之后我将介绍在springboot中进行读写分离配置.

你可能感兴趣的:(环境配置,服务器,MySQL)