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

MySQL 8.0.11执行ALTER USER重置密码后仍报ERROR 1820求助

解决MySQL 8.0.11 ERROR 1820 密码重置问题

这个问题我碰到过,核心原因是你执行的ALTER USER语句里多了个PASSWORD EXPIRE——这玩意儿不是用来完成密码重置的,反而会强制把新设置的密码标记为过期状态,所以系统才会一直提示你必须重置密码。

下面给你两种解决方案,根据你的实际情况选:

方案1:在当前会话中修正密码设置(能登录的情况下)

如果你还能正常进入MySQL会话,直接执行下面的正确语句,去掉多余的PASSWORD EXPIRE:

ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';

要是你想明确让密码永不过期,可以加上PASSWORD EXPIRE NEVER:

ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码' PASSWORD EXPIRE NEVER;

执行完退出当前会话,重新登录就没问题了。

方案2:跳过密码验证强制重置(无法登录的情况下)

要是你已经登不进去了,就得用跳过权限验证的方式来重置:

  1. 先停掉MySQL服务:
    • Windows(管理员命令提示符):net stop mysql
    • Linux:systemctl stop mysql(老系统用service mysql stop)
  2. 启动MySQL并跳过权限验证:
    • Windows:mysqld --skip-grant-tables --shared-memory
    • Linux:mysqld_safe --skip-grant-tables &
  3. 新开一个终端/命令提示符,直接无密码登录:
    mysql -u root
    
  4. 切换到系统数据库:
    USE mysql;
    
  5. 重置密码(MySQL 8.0不能用旧的PASSWORD()函数,推荐用ALTER USER):
    ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新复杂密码';
    
    要是ALTER USER报错,先清空旧密码再重置:
    UPDATE user SET authentication_string = '' WHERE user = 'root' AND host = 'localhost';
    FLUSH PRIVILEGES;
    ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新复杂密码';
    
  6. 刷新权限:
    FLUSH PRIVILEGES;
    
  7. 退出MySQL,停掉刚才跳过验证的进程,再正常启动MySQL服务,用新密码登录就行。

注意事项

  • MySQL 8.0默认有严格的密码策略,新密码得够复杂(至少8位,包含大小写、数字、特殊字符),不然会报错;
  • 确认你操作的是'root'@'localhost'用户,要是远程连接的话,得把localhost换成对应的IP或者%(注意安全风险)。

内容的提问来源于stack exchange,提问作者user9684283

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:57:11