MySQL 8.0.30重置root密码失败:--skip-grant-tables下ALTER USER无法执行
MySQL 8.0.30 root密码重置问题解答
为什么--skip-grant-tables模式下ALTER USER无法执行?
当MySQL以--skip-grant-tables启动时,会完全跳过权限系统的加载与校验逻辑,而ALTER USER是依赖mysql.user等权限表正常工作的权限管理语句,必须在权限系统生效的状态下才能执行,因此直接在该模式下运行ALTER USER会触发ERROR 1290错误。
UPDATE语句的语法问题是什么?
你的UPDATE语句存在两个核心问题:
- PASSWORD()函数已被移除:MySQL 8.0版本彻底删除了
PASSWORD()加密函数,不再支持用它生成密码哈希值,直接调用该函数会导致语法错误。 - 插件字段写法错误:错误提示中提到的
plugin='mysql_native_password',如果是你语句中附带的内容,写法不符合语法规范;且在8.0版本中,设置认证插件无需与authentication_string放在同一条UPDATE语句中(如需设置可单独更新)。
正确的root密码重置方案
按以下步骤操作即可完成重置:
- 停止正在运行的MySQL服务:
sudo systemctl stop mysql - 启动MySQL并跳过权限表,同时关闭网络连接(避免内网意外访问):
sudo mysqld_safe --skip-grant-tables --skip-networking & - 无密码登录MySQL:
mysql -u root - 关键步骤:刷新权限表,让MySQL重新加载权限系统,此时才能正常执行
ALTER USER:FLUSH PRIVILEGES; - 使用
ALTER USER重置root空密码:ALTER USER 'root'@'localhost' IDENTIFIED BY ''; - 退出MySQL,重启服务恢复正常运行:
exit sudo systemctl restart mysql
如果偏好使用UPDATE语句,可将步骤5替换为:
UPDATE mysql.user SET authentication_string='' WHERE User='root' AND Host='localhost'; FLUSH PRIVILEGES;
若需要指定认证插件(如mysql_native_password),可额外执行:
UPDATE mysql.user SET plugin='mysql_native_password' WHERE User='root' AND Host='localhost'; FLUSH PRIVILEGES;
内容的提问来源于stack exchange,提问作者Jay Bienvenu
相关产品推荐
相关产品推荐

