《Rocky Linux 9.6 部署 MySQL 8.0 生产手册(含错误处理)》

包含:

✔ 标准安装流程

✔ 遇到的 GPG 错误及解决

✔ root 无法登录问题

✔ 使用 skip-grant-tables 修复密码

✔ 全过程命令 + 解释

✔ 适合企业留档


适用于版本:

  • Rocky Linux 9.x
  • MySQL 8.0.39 / MySQL 8.0.44
  • 在线安装(推荐)

🧩 目录

  1. 环境准备
  2. 安装 MySQL 官方 YUM 源
  3. 导入官方 GPG Key(解决 GPG 签名错误)
  4. 安装 MySQL
  5. 启动并获取临时密码
  6. 登录 MySQL(理论情况)
  7. 登录失败错误排查(1045)
  8. 使用 systemd override 模式跳过授权表
  9. 重置 root 密码
  10. 恢复正常服务模式
  11. 验证 MySQL
  12. 常见问题 FAQ

1️⃣ 环境准备

Rocky Linux 9.6 系统,具有互联网访问环境。

bash 复制代码
dnf install -y wget vim

2️⃣ 安装 MySQL 官方 YUM 源

bash 复制代码
cd /tmp
wget https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
rpm -ivh mysql80-community-release-el9-1.noarch.rpm

查看仓库是否生效:

bash 复制代码
dnf repolist | grep mysql

应包含:

复制代码
mysql-connectors-community
mysql-tools-community
mysql80-community

3️⃣ 导入 MySQL 最新 GPG Key(关键步骤)

安装时出现的典型报错如下:

复制代码
Public key for mysql-community-client-8.0.44... is not installed.
Error: GPG check FAILED

这是因为 MySQL 从 2022/2023 起更换了 Key。

执行导入:

bash 复制代码
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023

然后重新生成缓存:

bash 复制代码
dnf clean all
dnf makecache

4️⃣ 安装 MySQL(默认安装最新的 8.0.x)

bash 复制代码
dnf install -y mysql-community-server

如果需要指定版本 8.0.39:

bash 复制代码
dnf install -y mysql-community-server-8.0.39*

遇到 GPG 再报错可使用:

bash 复制代码
dnf install -y mysql-community-server --nogpgcheck

5️⃣ 启动 MySQL 并获取 root 临时密码

启动服务:

bash 复制代码
systemctl enable mysqld
systemctl start mysqld
systemctl status mysqld

查看临时密码:

bash 复制代码
grep 'temporary password' /var/log/mysqld.log

例如:

复制代码
A temporary password is generated for root@localhost: SBdJfRkht9.,

6️⃣ 理论情况下登录 MySQL

复制代码
mysql -u root -p

输入上述临时密码。


7️⃣ 登录失败错误排查(1045)

实际遇到错误如下(典型场景):

复制代码
ERROR 1045 (28000): Access denied for user 'root'@'localhost'

即使临时密码正确仍无法登录,需要进入 跳过权限表模式 修复 root 密码。


8️⃣ 进入 MySQL 跳过授权表模式(systemd override)

注意:MySQL 不允许通过 root 用户直接用 mysqld --skip-grant-tables 启动

必须通过 systemd 修改启动行为

8.1 停止 MySQL

bash 复制代码
systemctl stop mysqld

确保没有 mysqld:

bash 复制代码
ps -ef | grep mysqld

8.2 创建 override.conf

bash 复制代码
mkdir -p /etc/systemd/system/mysqld.service.d
vim /etc/systemd/system/mysqld.service.d/override.conf

写入以下内容:

复制代码
[Service]
ExecStart=
ExecStart=/usr/sbin/mysqld --skip-grant-tables --skip-networking

保存退出:

复制代码
:wq

8.3 重新加载 systemd

bash 复制代码
systemctl daemon-reload
systemctl restart mysqld

9️⃣ 无密码登录并修改 root 密码

现在可以无密码登录:

bash 复制代码
mysql -u root

进入后执行:

sql 复制代码
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root@123456!';

退出:

sql 复制代码
exit;

🔟 恢复 MySQL 正常模式

删除 override 文件:

bash 复制代码
rm -f /etc/systemd/system/mysqld.service.d/override.conf
systemctl daemon-reload
systemctl restart mysqld

1️⃣1️⃣ 使用新密码登录验证

bash 复制代码
mysql -u root -p

输入:

复制代码
Root@123456!

登录成功则表示修复完成。


1️⃣2️⃣ 常见问题 FAQ

✔ Q1:如何查看当前 MySQL 版本?

bash 复制代码
mysqld --version

✔ Q2:3306 是否监听?

bash 复制代码
ss -lntp | grep mysqld

✔ Q3:如何开启远程访问?

登录 MySQL:

sql 复制代码
CREATE USER 'root'@'%' IDENTIFIED BY 'Root@123456!';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

✔ Q4:防火墙放通 3306

bash 复制代码
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

相关推荐
SudosuBash2 小时前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI12 小时前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
于眠牧北13 小时前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
十日十行1 天前
Linux和window共享文件夹
linux
木心月转码ing2 天前
WSL+Cpp开发环境配置
linux
Turnip12022 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql
崔小汤呀3 天前
最全的docker安装笔记,包含CentOS和Ubuntu
linux·后端
何中应3 天前
vi编辑器使用
linux·后端·操作系统
何中应3 天前
Linux进程无法被kill
linux·后端·操作系统
何中应3 天前
rm-rf /命令操作介绍
linux·后端·操作系统