Ubuntu下 MySQL 8.4 忘记 root 密码解决办法

AI摘要
这是一篇关于MySQL 8.0忘记root密码后的完整排错与修复指南,属于【知识分享】。文章详细记录了从停止服务、跳过权限表启动、修复认证插件、清空密码到设置新密码的完整步骤,并针对常见错误(如PASSWORD()函数移除、插件未加载、密码强度不足等)给出了具体解决方案,适合数据库管理员参考。

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 协议》,转载必须注明作者和本文链接
困困熊
打赏
Meriodas
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!