首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

解決 MySQL 修改密碼後報錯:You must reset your password using ALTER USER

     編輯:MySQL 資料庫相關知識

錯誤現象

修改 MySQL root 密碼後,登錄執行任何 SQL 報錯:

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

或舊版本提示:

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

根因分析

MySQL 5.6+ 引入密碼過期機制。通過 mysqladmin 或直接更新 mysql.user 表修改密碼時,未同步更新密碼過期狀態,導致服務器判定密碼已過期,強制要求重置。

快速解決方案

方法一:登錄後重置密碼 (推薦)

# 正常登錄 (使用新密碼)
mysql -u root -p

# 執行重置 (密碼可相同)
mysql> SET PASSWORD = PASSWORD('YourPassword123!');
Query OK, 0 rows affected (0.01 sec)

mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

方法二:跳過授權表修復 (忘記密碼適用)

# 1. 停止服務
systemctl stop mysqld

# 2. 跳過授權啟動
mysqld_safe --skip-grant-tables --skip-networking &

# 3. 無密碼登錄
mysql -u root

# 4. 更新密碼與過期狀態
mysql> USE mysql;
mysql> UPDATE user SET authentication_string=PASSWORD('NewPass123!'), password_expired='N' WHERE User='root';
mysql> FLUSH PRIVILEGES;

# 5. 正常重啟
mysqladmin -u root -p shutdown
systemctl start mysqld

版本差異說明

版本密碼列名推薦重置語法
5.7.6+authentication_stringALTER USER 'root'@'localhost' IDENTIFIED BY 'pass';
5.7.5-passwordSET PASSWORD = PASSWORD('pass');
5.6passwordSET PASSWORD = PASSWORD('pass');
8.0+authentication_stringALTER USER 'root'@'localhost' IDENTIFIED BY 'pass';

預防最佳實踐

  • 優先使用 ALTER USER 或 SET PASSWORD 官方語句修改密碼,避免直接操作系統表
  • 修改密碼後立即執行 ALTER USER ... PASSWORD EXPIRE NEVER 禁用過期
  • 使用 mysql_secure_installation 進行標準化安全初始化
  • 應用層配置連接池時啟用自動重連機制

總結

遇到 You must reset your password 錯誤,核心原因是密碼過期標記未清除。登錄後執行 SET PASSWORD + ALTER USER ... PASSWORD EXPIRE NEVER 即可秒級修復。養成使用官方密碼管理語句的習慣可從根源避免此問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved