Linux RPM 方式安装 MySQL 8.0

文章目录

一、安装方式说明

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 Forbidden
  • mirrors.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.rpm
  • mysql-community-client-plugins-8.0.24-1.el7.x86_64.rpm
  • mysql-community-libs-8.0.24-1.el7.x86_64.rpm
  • mysql-community-client-8.0.24-1.el7.x86_64.rpm
  • mysql-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
相关推荐
Bert.Cai4 小时前
Linux tee命令详解
linux·运维·服务器
宋浮檀s4 小时前
应急响应(系统日志)
linux·运维·网络安全·应急响应
arronKler4 小时前
MySQL命令行导出数据库
c语言·数据库·mysql
cui_ruicheng5 小时前
Linux网络编程(七):TCP Socket编程与EchoServer
linux·服务器·网络·tcp/ip
feasibility.5 小时前
nvidia-smi 失灵,显存凭空消失?—— NVML 驱动版本错配的记录
linux·运维·服务器·经验分享·nvidia·驱动
Wzx1980125 小时前
游标分页 + 数据删除:游标被删的完整解决方案
mysql
丿小王同学5 小时前
快速集群安装mysql
数据库·mysql
Irissgwe6 小时前
二、Linux基础开发工具(2)
linux·makefile·gcc·g++·
basketball6166 小时前
Linux sed 和 awk 命令使用方法
linux·运维·chrome