包含:
✔ 标准安装流程
✔ 遇到的 GPG 错误及解决
✔ root 无法登录问题
✔ 使用 skip-grant-tables 修复密码
✔ 全过程命令 + 解释
✔ 适合企业留档
适用于版本:
- Rocky Linux 9.x
- MySQL 8.0.39 / MySQL 8.0.44
- 在线安装(推荐)
🧩 目录
- 环境准备
- 安装 MySQL 官方 YUM 源
- 导入官方 GPG Key(解决 GPG 签名错误)
- 安装 MySQL
- 启动并获取临时密码
- 登录 MySQL(理论情况)
- 登录失败错误排查(1045)
- 使用 systemd override 模式跳过授权表
- 重置 root 密码
- 恢复正常服务模式
- 验证 MySQL
- 常见问题 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