錯誤 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES/NO) 是 MySQL 連線失敗最常見的錯誤。本文系統整理 Windows/Linux 環境下的多種成因與對應解決方案,涵蓋密碼重置、Socket 設定、權限表修復、配置檔檢查等完整排查路徑。
mysql.user 表無 root 記錄、Host 欄位不匹配。my.cnf 中 socket、datadir 路徑錯誤。mysql 而非服務腳本、環境變數缺失。net stop mysql)。C:\mysql-init.txt,內容:SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPassword');C:\mysql\bin\mysqld-nt --init-file=C:\mysql-init.txtmysql-init.txt,正常重啟服務。/etc/init.d/mysql stop
mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
mysql -u root mysql
UPDATE user SET Password=PASSWORD('newpassword') WHERE USER='root';
FLUSH PRIVILEGES;
quit
/etc/init.d/mysql restart
mysql -uroot -p'newpassword'
mysqladmin -uroot -p'oldpassword' password 'newpassword'
| 現象 | 原因 | 解決 |
|---|---|---|
輸入 mysql start 無反應 | 啟動指令錯誤 | 用 /etc/init.d/mysql start 或 systemctl start mysqld |
| PHP 連線報 1045 / 2002 | PHP 讀取的 socket 路徑與 MySQL 實際不同 | 修改 /etc/php.ini:mysql.default_socket=/var/lib/mysql/mysql.sock並建立軟連結: ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock |
提示 command not found | PATH 未包含 MySQL bin 目錄 | 用絕對路徑 /usr/local/mysql/bin/mysql 或加入 PATH |
需用 service mysql start/stop | 系統服務管理方式 | 習慣使用 service/systemctl 指令 |
/etc/my.cnf 的 [client] 與 [mysqld] 區塊 socket 路徑一致(如 /var/lib/mysql/mysql.sock)。datadir 指向正確資料目錄。/etc/init.d/mysql 中 datadir 變數正確。-- 進入 skip-grant-tables 模式後
USE mysql;
-- 確認 root 存在
SELECT User, Host, authentication_string FROM user WHERE User='root';
-- 若無或 Host 不對(如缺 'localhost' 或 '%')
INSERT INTO user (Host, User, Password) VALUES ('%', 'root', PASSWORD('newpass'));
-- 或修正 Host
UPDATE user SET Host='%' WHERE User='root' AND Host='::1';
FLUSH PRIVILEGES;
ps aux | grep mysqld)。mysql -uroot -p 輸入密碼;失敗則進入密碼重置流程。/var/log/mysqld.log 定位具體原因。系統化排查 1045 錯誤,從密碼重置到 Socket 修正再到權限表修復,層層遞進,總能找到癥結點恢復連線。