You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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语句存在两个核心问题:

  1. PASSWORD()函数已被移除:MySQL 8.0版本彻底删除了PASSWORD()加密函数,不再支持用它生成密码哈希值,直接调用该函数会导致语法错误。
  2. 插件字段写法错误:错误提示中提到的plugin='mysql_native_password',如果是你语句中附带的内容,写法不符合语法规范;且在8.0版本中,设置认证插件无需与authentication_string放在同一条UPDATE语句中(如需设置可单独更新)。

正确的root密码重置方案

按以下步骤操作即可完成重置:

  1. 停止正在运行的MySQL服务:
    sudo systemctl stop mysql
    
  2. 启动MySQL并跳过权限表,同时关闭网络连接(避免内网意外访问):
    sudo mysqld_safe --skip-grant-tables --skip-networking &
    
  3. 无密码登录MySQL:
    mysql -u root
    
  4. 关键步骤:刷新权限表,让MySQL重新加载权限系统,此时才能正常执行ALTER USER:
    FLUSH PRIVILEGES;
    
  5. 使用ALTER USER重置root空密码:
    ALTER USER 'root'@'localhost' IDENTIFIED BY '';
    
  6. 退出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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 06:50:24