《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

相关推荐
掉头发的王富贵2 小时前
【StarRocks】极限十分钟入门StarRocks
数据库·sql·mysql
用户805533698036 小时前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297916 小时前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux
SamDeepThinking7 小时前
一条UPDATE语句在MySQL 8.0中到底加了几把锁?
后端·mysql·程序员
Web3探索者2 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh
李白客2 天前
KES新版MySQL兼容能力再升级意味着什么?
mysql·国产数据库
zylyehuo2 天前
Linux系统中网线与USB网络共享冲突
linux
Sokach10153 天前
Linux Shell 脚本从零到能用:一个新手的一天学习总结
linux
AlfredZhao4 天前
Docker 容器时区不对,`timedatectl` 不存在怎么办?
linux·timezone