MySQL ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 常因 mysql.user 表存在匿名用戶(User='')導致權限匹配優先級異常。本文提供標準排查與修復流程。
mysql -u root -p 偶發失敗,報 1045 錯誤。MySQL 權限匹配順序:具體 Host > 通配 Host > 匿名用戶。
若 user 表存在 User='', Host='localhost' 匿名用戶,連線時可能優先匹配匿名用戶(無密碼),導致攜帶密碼的 root 連線被拒。
service mysql stop
mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
mysql -u root mysql
mysql> USE mysql;
mysql> SELECT User, Host, Password FROM user;
# 發現 User='' 匿名用戶
mysql> DELETE FROM user WHERE User='';
mysql> QUIT;
service mysql start
mysql -u root -p
# 登入成功
+------+-----------------------+----------+
| User | Host | Password |
+------+-----------------------+----------+
| root | % | *hash |
| root | localhost.localdomain | *hash |
| root | 127.0.0.1 | *hash |
| | localhost | | ← 匿名用戶
| | localhost.localdomain | | ← 匿名用戶
+------+-----------------------+----------+
mysql_secure_installation:移除匿名用戶、禁止 root 遠程登入、移除 test 資料庫、重新載入權限。mysql.user 表:SELECT User, Host FROM mysql.user WHERE User='' OR Password='';| 原因 | 排查/解決 |
|---|---|
| 密碼輸入錯誤 | 確認大小寫、特殊字元、鍵盤布局 |
| Host 欄位不匹配 | 檢查 User, Host 組合,需含 localhost/127.0.0.1/% |
| 密碼插件不匹配 | 5.7+ caching_sha2_password vs 客戶端支援度,可改 mysql_native_password |
| skip-grant-tables 未關閉 | 正常模式需重啟服務載入授權表 |
ERROR 1045 看似密碼錯誤,實則常為權限匹配邏輯與匿名用戶干擾所致。掌握「--skip-grant-tables 免密進入 → 清理匿名用戶 → 正常啟動」標準修復流程,並配合 mysql_secure_installation 例行加固,能從根源杜絕此類登入異常。