CentOS7安装MySQL8并配置主从

3 篇文章 0 订阅
1 篇文章 0 订阅

前言

本文从以下几个方面介绍在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%';

如下图所示:
log-bin开启

  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,则表示配置主从成功.
slaveStatus
如果配置完成之后发现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中进行读写分离配置.

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在CentOS 7下配置MySQL 5.7.22的主从复制,需要以下步骤: 1.安装MySQL 5.7.22版本 在CentOS 7上安装MySQL 5.7.22,可以使用如下命令: ``` sudo yum install mysql-server ``` 2.配置主服务器 在主服务器的配置文件`/etc/my.cnf`中添加如下内容: ``` server-id=1 log-bin=mysql-bin binlog-do-db=test ``` 其中,`server-id`表示服务器的ID,`log-bin`表示开启二进制日志,`binlog-do-db`表示指定需要同步的数据库名称。 3.重新启动MySQL服务器 在修改了配置文件后,需要重新启动MySQL服务器: ``` sudo systemctl restart mysqld ``` 4.创建用于复制的用户 在主服务器上创建一个用于复制的用户,并授予复制权限: ``` GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; ``` 其中,`slave_user`是用于复制的用户名,`password`是用户密码。 5.查看主服务器状态 在主服务器上运行如下命令查看主服务器状态: ``` SHOW MASTER STATUS; ``` 记录下`File`和`Position`的值,备用。 6.配置从服务器 在从服务器的配置文件`/etc/my.cnf`中添加如下内容: ``` server-id=2 replicate-do-db=test ``` 其中,`server-id`表示服务器的ID,`replicate-do-db`表示指定需要同步的数据库名称。 7.重新启动MySQL服务器 在修改了配置文件后,需要重新启动MySQL服务器: ``` sudo systemctl restart mysqld ``` 8.设置从服务器复制主服务器 在从服务器上运行如下命令,设置从服务器复制主服务器: ``` CHANGE MASTER TO MASTER_HOST='master_host_name', MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='master_log_file_name', MASTER_LOG_POS=master_log_pos; ``` 其中,`master_host_name`是主服务器的IP地址或主机名,`slave_user`和`password`是用于复制的用户名和密码,`master_log_file_name`和`master_log_pos`是之前在主服务器上记录的值。 9.启动从服务器复制 在从服务器上运行如下命令,启动从服务器复制: ``` START SLAVE; ``` 10.查看从服务器状态 在从服务器上运行如下命令查看从服务器状态: ``` SHOW SLAVE STATUS\G ``` 如果输出中`Slave_IO_Running`和`Slave_SQL_Running`的值都为`Yes`,则表示从服务器已经成功复制主服务器。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值