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:跳过密码验证强制重置(无法登录的情况下)
要是你已经登不进去了,就得用跳过权限验证的方式来重置:
- 先停掉MySQL服务:
- Windows(管理员命令提示符):
net stop mysql - Linux:
systemctl stop mysql(老系统用service mysql stop)
- Windows(管理员命令提示符):
- 启动MySQL并跳过权限验证:
- Windows:
mysqld --skip-grant-tables --shared-memory - Linux:
mysqld_safe --skip-grant-tables &
- Windows:
- 新开一个终端/命令提示符,直接无密码登录:
mysql -u root - 切换到系统数据库:
USE mysql; - 重置密码(MySQL 8.0不能用旧的
PASSWORD()函数,推荐用ALTER USER):
要是ALTER USER报错,先清空旧密码再重置:ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新复杂密码';UPDATE user SET authentication_string = '' WHERE user = 'root' AND host = 'localhost'; FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新复杂密码'; - 刷新权限:
FLUSH PRIVILEGES; - 退出MySQL,停掉刚才跳过验证的进程,再正常启动MySQL服务,用新密码登录就行。
注意事项
- MySQL 8.0默认有严格的密码策略,新密码得够复杂(至少8位,包含大小写、数字、特殊字符),不然会报错;
- 确认你操作的是
'root'@'localhost'用户,要是远程连接的话,得把localhost换成对应的IP或者%(注意安全风险)。
内容的提问来源于stack exchange,提问作者user9684283
相关产品推荐
相关产品推荐

