首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 安裝報錯 ERROR 1820 (HY000): You must SET PASSWORD 解決方案

     編輯:MySQL 綜合教學

MySQL 5.6+ 強制要求首次登錄後修改初始隨機密碼,否則拒絕執行任何語句。本文提供兩種修復方案:--skip-grant-tables 重置密碼、SET PASSWORD 直接修改,並解釋 mysqladmin 密碼修改失效的原因。

錯誤現象

# mysql -u root -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

# mysqladmin -u root -p password 'newpass'
Enter password: 
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: YES)'

方案一:跳過權限表重置(通用)

# 1. 停止服務
systemctl stop mysqld

# 2. 跳過權限表、禁用網絡啟動
mysqld_safe --user=mysql --skip-grant-tables --skip-networking &

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

# 4. 更新所有 root 賬號密碼
UPDATE user SET Password=PASSWORD('newpassword') 
  WHERE User='root' AND (Host='localhost' OR Host='127.0.0.1' OR Host='::1' OR Host='%');

# 5. 刷新權限並退出
FLUSH PRIVILEGES;
QUIT

# 6. 正常重啟
systemctl restart mysqld

# 7. 驗證
mysql -uroot -pnewpassword

方案二:MySQL 5.6+ 專用 SET PASSWORD

若已能登錄(如臨時密碼、.mysql_secret),直接執行:

mysql> SET PASSWORD = PASSWORD('123456');
Query OK, 0 rows affected (0.03 sec)

mysql> CREATE DATABASE test_db;
Query OK, 1 row affected (0.00 sec)

原理解析

  • MySQL 5.6+ 安全強化:mysql_install_db/mysqld --initialize 生成隨機臨時密碼(寫入 ~/.mysql_secret 或錯誤日志)。
  • 臨時密碼標記 password_expired='Y',首次登錄強制 SET PASSWORD 才能執行後續語句。
  • mysqladmin password 走舊協議,不支持過期密碼流程,故失敗。

避坑清單

  • 初始化後務必查看錯誤日志或 ~/.mysql_secret 獲取臨時密碼。
  • 生產環境禁用 --skip-grant-tables 時長,操作完成立即重啟恢復權限檢查。
  • 修改密碼後同步更新應用配置、備份腳本、監控採集器。
  • 5.7+ 推薦 ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass'; 替代 SET PASSWORD。

ERROR 1820 不是安裝失敗,而是安全機制生效。掌握「臨時密碼登錄 → SET PASSWORD」標準流程,或「skip-grant-tables 緊急重置」備用方案,能在 2 分鐘內解決首次登錄受阻問題。

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