MySQL 1045 錯誤表示認證失敗,常見於密碼遺忘、權限表損壞、Host 不匹配。本文提供 Linux/Windows 通用的三種重置 Root 密碼方案:--skip-grant-tables、Debian 維護帳號、Windows 命令行直連。
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
# 1. 停止服務
systemctl stop mysqld
# 或 /etc/init.d/mysql stop
# 2. 跳過權限表啟動 (後台)
mysqld_safe --skip-grant-tables --skip-networking &
# 3. 無密碼登入
mysql -u root
# 4. 修改密碼 (MySQL 5.7+)
USE mysql;
UPDATE user SET authentication_string = PASSWORD('newpwd') WHERE User = 'root';
FLUSH PRIVILEGES;
QUIT;
# 5. 正常重啟
systemctl restart mysqld
# 驗證
mysql -u root -p'newpwd'
注意:MySQL 5.7 欄位為 authentication_string,5.6 為 Password;8.0 建議 ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpwd';。
# 讀取維護帳號密碼
cat /etc/mysql/debian.cnf
# [client]
# user = debian-sys-maint
# password = xxxxxxxx
mysql -u debian-sys-maint -p'xxxxxxxx'
UPDATE mysql.user SET authentication_string = PASSWORD('newpwd') WHERE User = 'root';
FLUSH PRIVILEGES;
QUIT;
原理:系統安裝時自動創建擁有最高權限的維護帳號,不受 Root 密碼影響。
# 1. 管理員 CMD 停止服務
net stop mysql
# 2. 跳過權限啟動
cd D:\mysql\bin
mysqld --skip-grant-tables --console
# 保持窗口開啟
# 3. 新開 CMD 修改密碼
mysqladmin -u root flush-privileges password "newpwd"
# 4. 重啟服務
net start mysql
| 原因 | 排查命令 | 解決 |
|---|---|---|
| Host 不匹配 (用戶僅允許 localhost) | SELECT User, Host FROM mysql.user WHERE User='root'; | CREATE USER 'root'@'%' IDENTIFIED BY 'pwd'; GRANT ALL ON *.* TO 'root'@'%'; |
| 密碼插件不匹配 (caching_sha2_password vs mysql_native_password) | SELECT plugin FROM mysql.user WHERE User='root'; | ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd'; |
| 權限表損壞 | CHECK TABLE mysql.user; | 從備份恢復 mysql 库或重新初始化 |
| 連接數耗盡 | SHOW PROCESSLIST; | Kill 空閒連接、調大 max_connections |
admin@10.0.0.%) 替代 Root 日常運維。