前言

手上有个centos8stream的系统,要安装一个mysql5.7的数据库,二进制包还要配置,就寻思着整个yum安装试试看


一、安装步骤

1.添加 MySQL Yum 存储

首先,将 MySQL Yum 存储库添加到系统的存储库列表中。这是一次性操作,可以通过安装 MySQL 提供的 RPM 来执行。按着这些次序:

  1. 转到 MySQL 开发人员专区中的下载 MySQL Yum 存储库页面(官方存储库)
  2. 为您的平台选择并下载发布包
    在这里插入图片描述

我这边系统是 centos8stream 但是我选择的是选择el7的包
至于为啥~
https://repo.mysql.com/yum/mysql-5.7-community/el/
在这里插入图片描述
可以看到57版本 el是只有567的~~

复制链接地址

执行代码

sudo wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm

安装下载的rpm包

 sudo rpm -Uvh mysql80-community-release-el7-6.noarch.rpm

2.选择版本

查看版本库(对于启用 dnf 的系统, 将命令中的 yum替换为dnf)

yum repolist all | grep mysql

在这里插入图片描述
上面可以看到,默认启用的是80,因为我是要57版本的所以要设置一下,启用57,禁用80

sudo yum-config-manager --disable mysql80-community
sudo yum-config-manager --enable mysql57-community

如果支持dnf的话 就换成

sudo dnf config-manager --disable mysql80-community
sudo dnf config-manager --enable mysql57-community

再次查看
在这里插入图片描述
这里默认的就是57版本的了

确保是禁用80启用57的 至于两个同时开启的话系统安装的是哪个 我也不清楚
有闲的难受的同学可以试一下然后给我留个言哈

3.禁用默认 MySQL 模块

官方解释
(仅限 EL8 系统)基于 EL8 的系统(例如 RHEL8 和 Oracle Linux 8)包含默认启用的 MySQL 模块。除非禁用此模块,否则它会屏蔽 MySQL 存储库提供的包。要禁用包含的模块并使 MySQL 存储库包可见,请使用以下命令(对于启用 dnf 的系统, 将命令中的 yum替换为dnf):

sudo yum module disable mysql

4.安装mysql

sudo yum install mysql-community-server

执行后报错:

Curl error (37): Couldn't read a file:// file for file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022 [Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022]

没有etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022文件
说明签名不正确
我们检查一下:

rpm --checksig mysql80-community-release-el7-6.noarch.rpm

可以看到
在这里插入图片描述

这里确实验签失败的
我们直接看文档验签环节,为了省事直接url导入签名( 官方文档)

sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

再次执行安装…

二.变更数据目录 启动mysql

1.变更数据目录

执行

cat /etc/my.cnf

查看配置文件
在这里插入图片描述
可以看到 默认的数据目录实在/var/lib/mysql
我这台服务器的系统盘只有20G ,另外挂载了一块1T的盘 所以要变更数据目录到挂载盘上
如果不想变更的话 请直接跳过此步骤直接启动
修改配置文件

vim /etc/my.cnf

我修改了这几个目录

datadir=/data/mysql/data
socket=/data/mysql/mysql.sock
log-error=/data/mysql/log/mysqld.log

启动mysql

systemctl start mysqld

在这里插入图片描述
执行

journalctl -xe

查看报错信息
在这里插入图片描述
可以看到是selinux导致的问题,直接查看文档(官方文档)
MySQL 服务器读取和写入许多文件。如果没有为这些文件正确设置 SELinux 上下文,则可能会拒绝访问这些文件。
查看关于mysql的se权限

semanage fcontext -l | grep -i mysql 

在这里插入图片描述
那就按照文档的来

  • 设置 MySQL 数据目录上下文
    默认数据目录位置是 /var/lib/mysql/;并且使用的 SELinux 上下文是mysqld_db_t.
    如果您编辑配置文件以对数据目录或通常在数据目录中的任何文件(例如二进制日志)使用不同的位置,则可能需要为新位置设置上下文。例如:
semanage fcontext -a -t mysqld_db_t "/path/to/my/custom/datadir(/.*)?"
restorecon -Rv /path/to/my/custom/datadir
  • 设置MySQL 错误日志文件上下文
    RedHat RPM 的默认位置是 /var/log/mysqld.log;并且使用的 SELinux 上下文类型是mysqld_log_t.
    如果您编辑配置文件以使用不同的位置,您可能需要为新位置设置上下文。例如:
semanage fcontext -a -t mysqld_log_t "/path/to/my/custom/error.log"
restorecon -Rv /path/to/my/custom/error.log
  • 设置 Unix 域套接字上下文
    Unix 域套接字的默认位置是 /var/lib/mysql/mysql.sock; 并且使用的 SELinux 上下文类型是mysqld_var_run_t.
    如果您编辑配置文件以使用不同的位置,您可能需要为新位置设置上下文。例如:
semanage fcontext -a -t mysqld_var_run_t "/path/to/my/custom/mysql\.sock"
restorecon -Rv /path/to/my/custom/mysql.sock

执行systemctl start mysqld还是报错 继续 journalctl -xe

在这里插入图片描述
跟着报错信息走
执行

sealert -l c9aa87e5-6309-448a-8a26-cfd04da2e7fe

在这里插入图片描述
说是这个目录 mysql要权限 那就给它

semanage fcontext -a -t mysqld_db_t "/data(/.*)?"
restorecon -Rv /data

再次启动成功

systemctl status mysqld

在这里插入图片描述
找到系统生成的初始密码 就在那个mysqld.log里面
在这里插入图片描述
或者执行

sudo grep 'temporary password' /var/log/mysqld.log

把目录换成你自定义存放日志的目录就行了

在这里插入图片描述
执行

myslq -u root -p

在这里插入图片描述
还要在/etc/my.cnf里面添加client配置

[client]
socket=/data/mysql/mysql.sock

把client套接字文件改为上面的路径
就可以了:

2.启动mysql

systemctl start mysqld
systemctl status mysqld

在服务器的初始启动时,假设服务器的数据目录为空,会发生以下情况
服务器已初始化。

  • SSL 证书和密钥文件在数据目录中生成。
  • validate_password 已安装并启用。
  • 创建了一个超级用户帐户’root’@'localhost。超级用户的密码已设置并存储在错误日志文件中。要显示它,请使用以下命令:
sudo grep 'temporary password' /var/log/mysqld.log

通过使用生成的临时密码登录并为超级用户帐户设置自定义密码,尽快更改 root 密码

进入mysql:

mysql -uroot -p

修改mysql密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Password!1';

Note
validate_password 默认安装。实现的默认密码策略validate_password要求密码至少包含一个大写字母、一个小写字母、一个数字和一个特殊字符,并且密码总长度至少为8个字符。

如果嫌本地安装或者测试环境觉得这样的密码策略麻烦的话,可以变更密码验证策略实现.

警告: 以下操作,请谨慎执行

进入mysql,查看密码验证策略(官方文档)

SHOW VARIABLES LIKE 'validate_password%';

在这里插入图片描述
变量解释(官方文档):

  • validate_password_check_user_name 是否validate_password将密码与当前会话的有效用户帐户的用户名部分进行比较,如果匹配则拒绝它们
  • validate_password_dictionary_file validate_password用于检查密码 的字典文件的路径名
  • validate_password_length validate_password需要密码 的最少字符数
  • validate_password_mixed_case_count validate_password如果密码策略更强或更高,则要求密码具有 的最小小写和大写字符数
  • validate_password_number_count validate_password如果密码策略更强或更高,则要求密码具有 的最小数字(数字)字符数
  • validate_password_policy 密码策略
    • 0/LOW :只验证长度
    • 1/MEDIUM: 验证密码长度,数字,大小写字母,特殊字符
    • 2/STRONG:验证密码长度,数字,大小写字母,特殊字符,字典文件
  • validate_password_special_char_count validate_password如果密码策略更强或更高,则要求密码具有 的最小非字母数字字符数(特殊字符)

举例:如果你要设置123456这种密码,那就设置validate_password_policy为0,长度设置为6

 SET GLOBAL validate_password_length=6
 SET GLOBAL validate_password_policy=0

再次执行修改密码
在这里插入图片描述

可以看到 已经修改成功了

注意:
非测试环境强烈建议提高密码策略等级

3.远程访问

  • 首先设置root的host=%
use mysql; #进入数据库
update user set host = "%" where user = "root" ; #修改
FLUSH PRIVILEGES; #刷新配置
SELECT host,user FROM user ; #查看

在这里插入图片描述

  • 防火墙设置
    如果没有开启防火墙的话 这一步就可以跳过了
    查看防火墙状态
systemctl status firewalld.service

查看端口开启情况

firewall-cmd --query-port=3306/tcp

开启端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent

重启防火墙 使端口开启生效

systemctl restart firewalld

路过的同学点个赞吧,欢迎留言讨论…


参考文档

1.mysql8.0参考手册

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐