🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# mysql5.7密码过期处理过程 ## 一:问题现象: 1.业务日志提示从库连接不上,报错 2.使用出错的数据库业务帐号登录从库服务器后执行show databases;命令提示 ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. 百度翻译后是密码过期的意思 3.使用root账户登录,发现没有此现象,所有命令都可以执行 ## 二:解决过程: 1.使用密码过期的用户登录,然后输入修改密码的命令使密码更新 ``` set password=password('新密码'); ``` 重新执行命令后发现恢复正常,业务日志不报错了 ## 三:问题本质: 1.经查阅资料后发现,mysql-5.7控制密码的设置是由default_password_lifetime这个全局密码过期策略来控制的. 2.经查阅资料,在mysql-5.7.4 ~ mysql-5.7.10 这些版本中default_password_lifetime的默认值是360天, 3.mysql-5.7默认创建用户的时候会自动加上一条使用系统默认过期时间的选项,所以导致360天之后这个账号就过期了 ## 四:相关命令: 1.查看mysql系统默认的全局过期策略设置 ``` mysql> show global variables like 'default_password_lifetime'; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 8061628 Current database: *** NONE *** +---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | default_password_lifetime | 360 | +---------------------------+-------+ 1 row in set (0.00 sec) ``` 2.查看创建用户的权限是否有过期策略,期中"PASSWORD EXPIRE DEFAULT"就是使用默认的密码过期策略. ``` mysql> show create user 'test123'@'192.168.47.%'\G *************************** 1. row *************************** CREATE USER for test123@192.168.5.%: CREATE USER 'test123'@'192.168.47.%' IDENTIFIED WITH 'mysql_native_password' AS '*1A9646511250C833E3195FB43F11BE9390FB97DE' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK 1 row in set (0.00 sec) ``` ## 五.修改方法: 1,修改用户的密码 ``` set password=password('新密码') ``` 2.修改系统默认的过期时间为永不过期 ``` SET GLOBAL default_password_lifetime = 0; ``` 3.创建用户的时候指定密码过期策略,这样就不使用系统的默认过期策略 ``` ALTER USER 'test'@'localhost' PASSWORD EXPIRE NEVER; 密码不过期 ```