mysql -u root -p
Enter password: ******
mysql> SELECT 1;
ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
# phpMyAdmin
#1862 - Cannot log in to the MySQL server
MySQL 5.6.6 引入密碼過期策略。mysql.user 表新增 password_expired 欄位('Y'/'N')。若為 'Y',用戶登入後**只能執行密碼修改語句**,其他語句全部阻擋,報 1820。phpMyAdmin 嘗試執行 SHOW DATABASES 等操作被阻擋,顯示 1862。
-- 1. 登入(仍可登入)
mysql -u root -p
-- 2. 重新設定密碼(可設為原密碼)
mysql> SET PASSWORD = PASSWORD('your_password');
Query OK, 0 rows affected
-- 3. 關閉過期標記(5.7.6+ 支援 ALTER USER)
mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected
-- 4. 刷新權限
mysql> FLUSH PRIVILEGES;
-- 5. 驗證
mysql> SELECT 1;
+---+
| 1 |
+---+
| 1 |
+---+
-- 查看過期帳號
SELECT User, Host, password_expired FROM mysql.user WHERE password_expired = 'Y';
-- 批量關閉過期(謹慎,建議逐個確認)
UPDATE mysql.user SET password_expired = 'N' WHERE password_expired = 'Y';
FLUSH PRIVILEGES;
[mysqld]
# 關閉自動密碼過期(預設 360 天)
default_password_lifetime = 0
# 或設定較長週期(如 1 年)
# default_password_lifetime = 365
重啟 MySQL 生效。現有帳號需手動 ALTER USER ... PASSWORD EXPIRE NEVER。
password_expired 為 'Y' 時,僅允許 SET PASSWORD。ALTER USER ... PASSWORD EXPIRE NEVER,且 default_password_lifetime 預設 360 天。PASSWORD EXPIRE INTERVAL、FAILED_LOGIN_ATTEMPTS 等)。遇到 1820/1862,**先改密碼、再關過期、最後刷新權限**,三步恢復正常。將 default_password_lifetime=0 納入標準部署模板,避免突發「密碼過期」停機。