centos8安装mysql5.7(全新)
centos8stream yum/dnf 安装 mysql5.7的数据库
文章目录
前言
手上有个centos8stream的系统,要安装一个mysql5.7的数据库,二进制包还要配置,就寻思着整个yum安装试试看
一、安装步骤
1.添加 MySQL Yum 存储库
首先,将 MySQL Yum 存储库添加到系统的存储库列表中。这是一次性操作,可以通过安装 MySQL 提供的 RPM 来执行。按着这些次序:
我这边系统是 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
路过的同学点个赞吧,欢迎留言讨论…
参考文档
更多推荐
所有评论(0)