今天一早收到了伺服器掛掉的資訊
一查發現了沒見過的錯誤訊息
MySQLi connect failed: Your password has expired. To log in you must change it using a client that supports expired passwords.
看到這個錯誤訊息以後,馬上使用 HeidiSQL 登入,居然提示我要修改密碼!火速改好密碼以後,開始檢查原因所在,發現這個密碼過期的功能,是 MySQL 5.7 的新功能!
https://dev.mysql.com/doc/refman/5.7/en/password-expiration-policy.html
在此節錄一些重點
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE;
ALTER USER 'script'@'localhost' PASSWORD EXPIRE NEVER;
SELECT User, Host, password_last_changed, password_lifetime FROM mysql.user;
多了一個 global variable default_password_lifetime
5.7.4 到 5.7.10 是預設 360在 aws 上的 rds 我是用 5.7.11 ,但是 default_password_lifetime 還是 360 (抓到元兇)
SELECT @@default_password_lifetime;
mysql> select @@default_password_lifetime;
+-----------------------------+
| @@default_password_lifetime |
+-----------------------------+
| 360 |
+-----------------------------+
1 row in set (0.01 sec)
my.cnf[mysqld]
default_password_lifetime=0
SET GLOBAL default_password_lifetime = 0;
好死不死 aws 的 rds 不提供 SET GLOBAL 的 SUPER 權限,所以必須用其他的方法來設定。
default_password_lifetimedefault.mysql5.7 進行比較 (選取兩個然後點 Compare Parameters) (我又順手改了一些 charset 和 innodb_purge_threads=4 設定)
instance Actions > Modify
mysql> select @@default_password_lifetime;
+-----------------------------+
| @@default_password_lifetime |
+-----------------------------+
| 0 |
+-----------------------------+
1 row in set (0.00 sec)
ALTER USER 'script'@'localhost' PASSWORD EXPIRE NEVER;