Ubuntu下 MySQL 8.4 忘记 root 密码解决办法
MySQL 8.0 忘记 root 密码?从零开始的完整救援指南
一次真实的排错记录:从各种报错到最终解决,涵盖 MySQL 8.0 与旧版本的核心差异
前言
如果你还在使用 UPDATE user SET password=PASSWORD('123456')... 这种老掉牙的命令来修改 MySQL 8.0 的密码,那这篇文章就是为你准备的。
本文记录了我在 MySQL 8.4.8 上忘记密码后的完整排错过程,遇到的每一个错误都有对应的解决方案。
环境说明
- MySQL 版本:8.4.8 (Linux/Ubuntu)
- 操作系统:Ubuntu 24.04+
- 问题:root 密码遗忘,且错误地配置了
mysql_native_password插件
常见错误速查表
| 错误信息 | 原因 | 解决方案 |
|---|---|---|
ERROR 1064...syntax...PASSWORD('123456') |
MySQL 8 已移除 PASSWORD() 函数 |
使用 ALTER USER 语法 |
ERROR 1396 (HY000): Operation ALTER USER failed |
在 --skip-grant-tables 模式下未刷新权限 |
先执行 FLUSH PRIVILEGES; |
ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded |
用户被错误配置为使用未加载的认证插件 | 修改 plugin 为 caching_sha2_password |
ERROR 1819 (HY000): Your password does not satisfy... |
密码强度不符合 MySQL 8 的策略 | 使用强密码或临时调低策略 |
完整解决步骤
第一步:停止 MySQL 服务
sudo systemctl stop mysql
第二步:以跳过权限表模式启动
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
skip-grant-tables
sudo systemctl start mysql
第三步:免密码登录
# 输入任意密码
mysql -uroot -p
第四步:修复用户认证插件并清空密码
-- 必须最先执行,否则无法修改用户表
FLUSH PRIVILEGES;
-- 查看当前 root 用户状态
SELECT User, Host, plugin, authentication_string FROM mysql.user WHERE User='root';
-- 我这里错误的修改了插件所以需要这样执行
-- 修复:将 plugin 改为 MySQL 8 默认的 caching_sha2_password,并清空密码
UPDATE mysql.user SET plugin='caching_sha2_password', authentication_string='' WHERE User='root';
-- 一般执行
UPDATE mysql.user SET authentication_string='' WHERE User='root'
-- 再次刷新权限
FLUSH PRIVILEGES;
-- 退出
EXIT;
第五步:正常重启 MySQL
sudo systemctl start mysql
第六步:用空密码登录并设置新密码
mysql -uroot -p
-- 设置新密码(MySQL 8 会自动使用 caching_sha2_password)
-- 注意你的root的host是不是`localhost`,我的是`%`
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPassword123!';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出
EXIT;
第七步:还原配置文件并登录
# 去掉skip-grant-tables后
sudo systemctl restart mysql
mysql -uroot -p
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu