文章目录
- 一、安装方式说明
- 二、安装步骤
-
- [第一步:下载 RPM Bundle 包](#第一步:下载 RPM Bundle 包)
- [第二步:解压 Bundle 包](#第二步:解压 Bundle 包)
- [第三步:按顺序安装 RPM 包](#第三步:按顺序安装 RPM 包)
-
- [可能遇到的问题:安装 server 包时 yum repo 报错](#可能遇到的问题:安装 server 包时 yum repo 报错)
- [第四步:配置 my.cnf](#第四步:配置 my.cnf)
-
- [可能遇到的问题:basedir 配置错误](#可能遇到的问题:basedir 配置错误)
- 第五步:初始化数据目录
- [第六步:启动 MySQL](#第六步:启动 MySQL)
-
- 可能遇到的问题一:权限不足导致启动失败
- [可能遇到的问题二:SELinux 阻止访问](#可能遇到的问题二:SELinux 阻止访问)
- 第七步:登录并修改密码
- 三、安装后验证
- 四、文件位置速查
一、安装方式说明
RPM 安装与二进制包安装的核心区别:
| 对比项 | RPM 安装 | 二进制包安装 |
|---|---|---|
| 文件位置 | 分散到系统目录 | 集中在一个目录 |
| 程序路径 | /usr/sbin/mysqld、/usr/bin/mysql |
/usr/local/mysql8/bin/ |
| 配置文件 | /etc/my.cnf |
自定义路径 |
| 服务管理 | systemctl |
手动或自定义 |
| 初始化 | 自动 | 手动执行 mysqld --initialize |
| PATH 配置 | 不需要(/usr/bin 已在 PATH 中) |
需要手动添加 |
| 多版本共存 | 不支持 | 支持 |
| 适用场景 | 单版本生产环境 | 需要定制化或多版本 |
通过二进制包安装Mysql8,请看:
Linux: CentOS7安装MySQL8
CentOS 7 yum 无法使用解决方法
二、安装步骤
第一步:下载 RPM Bundle 包
bash
cd /usr/local
wget https://repo.huaweicloud.com/mysql/Downloads/MySQL-8.0/mysql-8.0.24-1.el7.x86_64.rpm-bundle.tar
可能遇到的问题:镜像源无法访问
现象:
repo.mysql.com→ 拒绝连接mirrors.tuna.tsinghua.edu.cn→ 403 Forbiddenmirrors.aliyun.com→ 404 Not Found
原因: 镜像源路径变更,或服务器网络限制了外部连接。
解决方案: 先测试哪个镜像可用:
bash
curl -I https://repo.huaweicloud.com/mysql/Downloads/MySQL-8.0/
curl -I https://mirrors.ustc.edu.cn/mysql-ftp/Downloads/MySQL-8.0/
返回 200 OK 的镜像即可使用。推荐华为云镜像,稳定性较好。
第二步:解压 Bundle 包
bash
mkdir mysql-8.0.24
tar -xvf mysql-8.0.24-1.el7.x86_64.rpm-bundle.tar -C mysql-8.0.24
cd mysql-8.0.24
ls
解压后应包含以下文件:
mysql-community-common-8.0.24-1.el7.x86_64.rpmmysql-community-client-plugins-8.0.24-1.el7.x86_64.rpmmysql-community-libs-8.0.24-1.el7.x86_64.rpmmysql-community-client-8.0.24-1.el7.x86_64.rpmmysql-community-server-8.0.24-1.el7.x86_64.rpm- 其他可选包(devel、test、embedded-compat 等)
第三步:按顺序安装 RPM 包
依赖顺序不能乱,必须按以下顺序逐一安装:
bash
yum install -y mysql-community-common-8.0.24-1.el7.x86_64.rpm
yum install -y mysql-community-client-plugins-8.0.24-1.el7.x86_64.rpm
yum install -y mysql-community-libs-8.0.24-1.el7.x86_64.rpm
yum install -y mysql-community-client-8.0.24-1.el7.x86_64.rpm
yum install -y mysql-community-server-8.0.24-1.el7.x86_64.rpm
使用
yum install而非rpm -ivh,可自动从系统源安装 perl、libaio、net-tools 等依赖。
可能遇到的问题:安装 server 包时 yum repo 报错
现象:
One of the configured repositories failed (MySQL 8.0 Community Server)
HTTPS Error 404 - Not Found
原因: 此前尝试配置 yum repo 方式安装时留下了无效的 repo 文件(/etc/yum.repos.d/mysql-community.repo),安装 server 包时 yum 仍会去访问该 repo 导致失败。
解决方案:
bash
# 删除无效 repo 文件后重新安装
rm -f /etc/yum.repos.d/mysql-community.repo
yum install -y mysql-community-server-8.0.24-1.el7.x86_64.rpm
第四步:配置 my.cnf
RPM 安装的配置文件路径为 /etc/my.cnf,直接编辑即可:
bash
vi /etc/my.cnf
关键配置项如下:
ini
[mysql]
default-character-set = utf8mb4
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
user = mysql
socket = /tmp/mysql.sock
basedir = /usr # RPM 安装固定为 /usr,不可改
datadir = /data/mysql8_data/mysql # 自定义数据目录
log-error = /data/mysql8_data/mysql/mysql.log
character-set-server = utf8mb4
lower_case_table_names = 1
default_storage_engine = InnoDB
可能遇到的问题:basedir 配置错误
现象: 启动时日志报错:
Can't find error-message file '/usr/local/mysql8/share/mysql-8.0/errmsg.sys'
原因: 按照二进制包教程将 basedir 设为 /usr/local/mysql8,但 RPM 安装的实际 basedir 是 /usr,路径不同导致找不到系统文件。
解决方案:
bash
sed -i 's|basedir.*=.*/usr/local/mysql8|basedir = /usr|' /etc/my.cnf
# 确认修改结果
grep basedir /etc/my.cnf
第五步:初始化数据目录
如果使用自定义 datadir,需要手动创建目录并初始化:
bash
# 创建目录并授权
mkdir -p /data/mysql8_data/mysql
chown -R mysql:mysql /data/mysql8_data/
chmod -R 750 /data/mysql8_data/
# 初始化数据库(--initialize-insecure 表示 root 初始密码为空)
mysqld --defaults-file=/etc/my.cnf --user=mysql --initialize-insecure
如果使用默认 datadir(
/var/lib/mysql/),此步骤可跳过,systemctl 启动时会自动初始化。
第六步:启动 MySQL
bash
systemctl start mysqld
systemctl enable mysqld # 设置开机自启
systemctl status mysqld # 检查运行状态
可能遇到的问题一:权限不足导致启动失败
现象:
Error: 13 (权限不够)
Could not open file '/data/mysql8_data/mysql/mysql.log' for error logging: Permission denied
原因: 数据目录或日志文件的所有者不是 mysql 用户。
解决方案:
bash
chown -R mysql:mysql /data/mysql8_data/
chmod -R 750 /data/mysql8_data/
chown mysql:mysql /data/mysql8_data/mysql/mysql.log
chmod 640 /data/mysql8_data/mysql/mysql.log
systemctl start mysqld
可能遇到的问题二:SELinux 阻止访问
现象: 权限已修复但仍然报 Permission denied。
排查方法:
bash
# 查看 SELinux 状态
getenforce
# 查看文件的 SELinux 上下文(应为 mysqld_log_t,实际可能是 default_t)
ls -lZ /data/mysql8_data/mysql/mysql.log
原因: SELinux 处于 Enforcing 模式,自定义路径的文件上下文不是 MySQL 所需的 mysqld_log_t,导致访问被强制拦截。
解决方案:
bash
# 临时关闭(立即生效,重启后失效)
setenforce 0
# 永久关闭(需重启生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 再次启动
systemctl start mysqld
第七步:登录并修改密码
bash
# 使用 socket 登录(初始密码为空)
mysql -uroot -S /tmp/mysql.sock
登录后修改密码:
sql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourPassword123!';
FLUSH PRIVILEGES;
EXIT;
可能遇到的问题:密码强度不满足要求
现象:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
原因: MySQL 默认密码策略要求包含大小写字母、数字、特殊符号,且长度不低于 8 位,简单密码(如 123456)会被拒绝。
解决方案:
临时降低密码策略(当前会话生效):
sql
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 6;
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
永久生效,在 /etc/my.cnf 的 [mysqld] 段添加:
ini
validate_password.policy = LOW
validate_password.length = 6
三、安装后验证
重启服务器后,验证 MySQL 是否正常自启并可连接:
bash
# 验证版本
mysql --version
# 验证服务状态
systemctl status mysqld
# 登录验证
mysql -uroot -p -S /tmp/mysql.sock
四、文件位置速查
| 文件 | 路径 |
|---|---|
| 客户端程序 | /usr/bin/mysql |
| 服务端程序 | /usr/sbin/mysqld |
| 配置文件 | /etc/my.cnf |
| 默认数据目录 | /var/lib/mysql/ |
| 默认日志文件 | /var/log/mysqld.log |
| systemd 服务文件 | /usr/lib/systemd/system/mysqld.service |