测试环境中有使用mysql-5.7.19的版本,最近出现了一个状态:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.  根据提示要重置密码,不然无法执行命令;这个问题的造成原因,居然是密码有效期过了导致的。

root用户登陆系统后的情况:

root@(none) 09:05:21>show processlist;

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

root@(none) 09:09:02>show databases;

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

root@(none) 09:09:04>select host,user,password_last_changed from mysql.user;

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

无法使用任何命令查看状态信息了;

怎么知道系统默认的有效期是多久呢?使用一个普通用登陆[未过期];默认系统的密码生命周期是360天就是一年这样了;

test01@(none) 09:11:43>show variables like 'default_password_lifetime';

+---------------------------+-------+

| Variable_name             | Value |

+---------------------------+-------+

| default_password_lifetime | 360   |

+---------------------------+-------+

1 row in set (0.00 sec)

那么最直接的方法就是改密码啦,但是改了密码360天后一样会过期的,有办法可以变成永不过期吗?其实在5.7.11版本后都已经把默认值从360变成了0也就是永不过期了;

那么目前的解决方法:

步骤一:停止mysql服务

net stop mysql

步骤二:启动mysql,使用命令:

mysqld --skip-grant-tables

步骤三:登陆mysql

mysql -h localhost -P8806 -u root -proot

如果要认密码永不过期的话,可以使用以下方法:

步骤四、修改密码

set  password=password('123456');

步骤五、设定密码的有效期为0,即永不过期;

set global default_password_lifetime=0;

在配置文件中添加配置;[如果不做上面修改,可以直接修改配置文件,但是改完后要重启服务才生效]

[mysqld]

default_password_lifetime=0

=========================我是分隔线啦=========================

当然上面的修改是全局的,如果你只想root用户密码不过期也可以这样配置:

步骤六:先查未修改前的记录是怎么样的?

root@(none) 09:27:34>select user,host,password_lifetime,password_last_changed,password_expired from mysql.user;

+-----------+-------------+-------------------+-----------------------+------------------+

| user      | host        | password_lifetime | password_last_changed | password_expired |

+-----------+-------------+-------------------+-----------------------+------------------+

| root      | localhost   |              NULL | 2017-06-12 09:24:24   | N                |

| mysql.sys | localhost   |              NULL | 2016-06-06 11:41:56   | N                |

| checksums | 10.0.10.110 |              NULL | 2017-05-06 10:41:38   | N                |

| repl      | 10.0.10.61  |              NULL | 2017-05-05 11:18:11   | N                |

| test01    | %           |              NULL | 2017-05-05 11:18:11   | N                |

+-----------+-------------+-------------------+-----------------------+------------------+

7 rows in set (0.02 sec)

修改root密码永不过期:

root@(none) 09:29:34>alter user 'root'@'localhost' password expire never;

Query OK, 0 rows affected (0.00 sec)

修改后的效果,可以看到的是password_lifetime的值变成0了;

root@(none) 09:30:03>select user,host,password_lifetime,password_last_changed,password_expired from mysql.user;

+-----------+-------------+-------------------+-----------------------+------------------+

| user      | host        | password_lifetime | password_last_changed | password_expired |

+-----------+-------------+-------------------+-----------------------+------------------+

| root      | localhost   |                 0 | 2017-06-12 09:24:24   | N                |

| mysql.sys | localhost   |              NULL | 2016-06-06 11:41:56   | N                |

| checksums | 10.0.10.110 |              NULL | 2017-05-06 10:41:38   | N                |

| repl      | 10.0.10.61  |              NULL | 2017-05-05 11:18:11   | N                |

| test01    | %           |              NULL | 2017-05-05 11:18:11   | N                |

+-----------+-------------+-------------------+-----------------------+------------------+

7 rows in set (0.00 sec)

如果要恢复到默认的策略,就是360天过期:

root@(none) 09:33:29>alter user 'root'@'localhost' password expire default;

Query OK, 0 rows affected (0.00 sec)

效果就是password_lifetime的值又变回NULL了,就是使用默认值了;

root@(none) 09:33:46>select user,host,password_lifetime,password_last_changed,password_expired from mysql.user;

+-----------+-------------+-------------------+-----------------------+------------------+

| user      | host        | password_lifetime | password_last_changed | password_expired |

+-----------+-------------+-------------------+-----------------------+------------------+

| root      | localhost   |              NULL | 2017-06-12 09:24:24   | N                |

| mysql.sys | localhost   |              NULL | 2016-06-06 11:41:56   | N                |

| checksums | 10.0.10.110 |              NULL | 2017-05-06 10:41:38   | N                |

| repl      | 10.0.10.61  |              NULL | 2017-05-05 11:18:11   | N                |

| test01    | %           |              NULL | 2017-05-05 11:18:11   | N                |

+-----------+-------------+-------------------+-----------------------+------------------+

7 rows in set (0.00 sec)

为了模拟普通用户密码过期我把上面的用户test01修改一下;

root@mysql 11:43:42>update user set password_expired='Y' where user='test01';

Query OK, 1 row affected (0.01 sec)

Rows matched: 1  Changed: 1  Warnings: 0

root@mysql 11:43:48>flush privileges;

Query OK, 0 rows affected (0.00 sec)

接下来换到test01登陆看看是否提示过期;

test01@(none) 11:44:19>show databases;

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

提示要重置密码了,就是说明直接修改配置文件生效了;

接下来使用root用户来更新test01的密码看有没有改变过期状态;

root@mysql 10:36:19>update user set authentication_string=password('12345678') where user='test01';

Query OK, 0 rows affected, 1 warning (0.00 sec)

Rows matched: 1  Changed: 0  Warnings: 1

root@mysql 11:47:19>flush privileges;

Query OK, 0 rows affected (0.00 sec)

仔细看password_last_changed的值依旧没有改变,而password_expired的状态还是为Y,就是过期状态还是未改变;

root@mysql 10:39:02>select user,host,password_lifetime,password_last_changed,password_expired from mysql.user;

+-----------+-------------+-------------------+-----------------------+------------------+

| user      | host        | password_lifetime | password_last_changed | password_expired |

+-----------+-------------+-------------------+-----------------------+------------------+

| root      | localhost   |              NULL | 2017-06-12 09:24:24   | N                |

| mysql.sys | localhost   |              NULL | 2016-06-06 11:41:56   | N                |

| test01    | %           |              NULL | 2016-01-02 12:12:12   | Y                |

| checksums | 10.0.10.110 |              NULL | 2017-05-06 10:41:38   | N                |

| repl      | 10.0.10.61  |              NULL | 2017-05-05 11:18:11   | N                |

+-----------+-------------+-------------------+-----------------------+------------------+

8 rows in set (0.00 sec)

使用test01登陆时已经是使用新密码了;

[root@mysql ~]# mysql -utest01 -p12345678

可是依旧提示密码过期,需要修改;

test01@(none) 10:34:45>show databases;

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

而test01的权限是怎么样的?

root@(none) 10:40:59>show grants for 'test01'@'%';

+-----------------------------------------------------+

| Grants for test01@%                                 |

+-----------------------------------------------------+

| GRANT USAGE ON *.* TO 'test01'@'%'                  |

| GRANT ALL PRIVILEGES ON `percona`.* TO 'test01'@'%' |

+-----------------------------------------------------+

2 rows in set (0.00 sec)

不管怎么样,这个普通用户一旦过期了,root用户哪怕修改了它的密码,但是无法触发到过期状态的改变;而改变过期状态的方法有两种:

1、使用普通用户登陆后,自己修改密码,也可以改回旧密码:

test01@(none) 10:40:11>set passwordpassword=password('12345678');

Query OK, 0 rows affected, 1 warning (0.00 sec)

2、就是使用root用户把过期的值改为N;

root@mysql 10:49:11>update user set password_expired='N' where user='test01';

Query OK, 1 row affected (0.01 sec)

Rows matched: 1  Changed: 1  Warnings: 0

root@(none) 10:49:51>flush privileges;    #root用户改了状态,记录要flush权限不然用普通用户立刻登陆还是不生效的。

Query OK, 0 rows affected (0.00 sec)

密码过期的参考文档:

https://bugs.mysql.com/bug.php?id=77277

mysql数据库密码有效期_Mysql5.7.19密码已过有效期的处理过程(密码过期password_expired)...相关推荐

  1. mysql 192.168.0.%_如果mysql数据库所在的主机IP是192.168.0.1,用户名是ec,密码是123456,则用php连接这个mysql数据库的命令可以写为:...

    [单选题]患者,老年女性.主诉头痛伴眩晕,呕吐半小时,到急诊科就诊.分诊护士可采用的问诊模式为 [填空题]妇人中风,七八日,续得寒热,发作时,经水适断者,此为__________.__________ ...

  2. mysql数据库密码错误_MySQL数据库经典错误六 数据库密码忘记的问题

    数据库密码忘记的问题[root@zs ~]# mysql -uroot -p Enter password: ERROR 1045 (28000): Access denied for user 'r ...

  3. win7上修改MySQL数据库密码

    一.通过命令行方式修改MySQL密码 1.方法一:用mysqladmin 格式:mysqladmin -u用户名 -p旧密码 password 新密码 实例:mysqladmin -uroot -pa ...

  4. Linux系统下修改mysql数据库密码

    修改mysql数据库的方法有很多种.这个方法适用于忘记root用户密码或者刚安装mysql要进入mysql时发现系统报错及觉得默认密码太复杂想修改密码的. 1.修改 /etc/my.cnf 文件 在 ...

  5. dapper mysql_.NET Core Dapper操作mysql数据库

    .NET Core Dapper操作mysql数据库 发布时间:2019-04-25 19:48, 浏览次数:744 , 标签: NET Core Dapper mysql 前言 现在ORM盛行,市面 ...

  6. 《php开发典型模块大全》读书笔记 第三章 mysql数据库基础

    第三章  mysql基础 show columns  from table describe table alter table 修改表 rename   table   t1  to   t2 整型 ...

  7. MySQL数据库+命令大全+常用操作

    格式:mysql -h主机地址 -u用户名 -p用户密码 1. 例:连接到本机上的MYSQL 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示 ...

  8. mysql数据库查询缓存_MySQL查询缓存与数据库管理

    MySQL查询缓存与数据库管理 上一篇 / 下一篇  2010-01-25 21:51:07 / 个人分类:MYSQL/Cache MySQL查询缓存 注意:查询缓存绝不返回过期数据. 如果一个表发生 ...

  9. MySQL数据库“十宗罪”(十大经典错误案例)

    各位技术老铁们,福利来了!今天给大家说说<数据库中十大经典错误案例> 老张我在刚开始学习数据库的时候,没少走弯路.经常会遇到各种稀奇古怪的 error 信息,遇到报错会很慌张,急需一个解决 ...

最新文章

  1. 如何利用azMan (Authorization Manager) 实现 role-based的安全验证机制
  2. 编译gtk+程序报错gcc: pkg-config --cflags --libs gtk+-2.0: 没有那个文件或目录
  3. Linux终端中设置vi编辑命令
  4. 内存中OLTP(Hekaton)的排序警告
  5. Hibernate Annotation中英文文档链接下载 (Hibernate 注解)
  6. 关于c++的文件编码的研究
  7. linux lsm 程序加载钩函数,LSM在Linux中的实现方式
  8. 使用Arquillian,Docker和Selenium使Web UI测试再次变得出色(第1部分)
  9. 《Python Cookbook 3rd》笔记(1.8):字典运算
  10. EasySchedulerr大数据调度系统架构分析
  11. #9733;宣传广告变成社会标准
  12. 使用google的jib, 发布Docker镜像到阿里云
  13. 人的一生该怎样度过?
  14. PON光模块相关知识
  15. 怎么理解什么是大数据呢?
  16. Boggle问题积累
  17. windows系统下自定义图标
  18. 联想小新13pro锐龙版网卡_联想小新Pro13 锐龙版简测
  19. 初始化磁盘选哪个格式 初始化磁盘分区形式选什么好
  20. mysql函数中打印信息_mysql信息函数

热门文章

  1. Ubuntu搭建Anki服务器
  2. vue循环渲染本地图片不显示?
  3. ko学习二,绑定语法
  4. repo 的几个使用理解
  5. Java-note-调试小技巧
  6. [置顶] 第五周项目一构造函数————4)参数初始化表
  7. mysql5.0 执行定时计划
  8. 在线等差数列项生成器
  9. 复旦大学邱锡鹏教授发布《神经网络与深度学习》教材,配备代码和章节练习...
  10. [转]Eclipse工具使用技巧总结