mysql5.7密码过期后更改仍然显示Your password has expired. To log in you must change it using a client that supports expired passwords.

mysql5.7密码过期后更改仍然显示Your password has expired. To log in you must change it using a client that supports expired passwords.

一月 23, 2020 阅读 24 字数 1021 评论 0 喜欢 0

今天登录wordpress的时候突然显示数据库连接错误,what? 。随后开始排查原因,登录了一下数据库原来是密码过期了,知道问题在哪就好解决了

首先在/etc/my.cnf文件中加入skip-grant-tables ,然后重启mysql服务 ,输入mysql -uroot 直接进入mysql数据库不用输入密码

查看一下user表的信息

select user,host,password_expired,password_last_changed from user;

MySQL版本5.6.6版本起,添加了password_expired功能,它允许设置用户的过期时间。

这个特性已经添加到mysql.user数据表,但是它的默认值是”N”。可以使用ALTER USER语句来修改这个值。

MySQL用户账号的到期日期一个简单例子:

mysql> ALTER USER ‘testuser’@’localhost’ PASSWORD EXPIRE;

一旦某个用户的这个选项设置为”Y”,那么这个用户还是可以登陆到MySQL服务器,但是在用户未设置新密码之前不能运行任何查询语句,而且会得到如下错误消息提示:

mysql> SHOW DATABASES;

ERROR 1820 (HY000): You must SET PASSWORD before executing this statement

Keep in mind that this does not affect any current connections the account has open.

当用户设置了新密码后,此用户的所有操作(根据用户自身的权限)会被允许执行。

执行命令

update mysql.user set authentication_string=password(‘123456’),password_expired = ‘N’,password_last_changed = now() where user = ‘root’;

刷新权限

flush privileges;

ok! exit退出把/etc/my.cnf中的 skip-grant-tables 注释掉 重启mysql 就可以登录了

ps:注意password_last_changed这个字段最后更改时间一定要加上去,不然可能会出现修改密码后系统还是提示你密码已过期,因为你这个在表里面的最后更改时间还是没变,系统会根据这个字段为基础进行判定,笔者也是经历了一次这个大坑,最后在一位老师的指导下才知道这个字段的效用

发表评论

电子邮件地址不会被公开。 必填项已用*标注

粤ICP备19099564号