萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL "Access denied for user root@localhost" 完整排查與修復

錯誤解讀

Access denied for user 'root'@'localhost' (using password: YES)

表示:root@localhost 此帳號存在,但密碼錯誤、或權限表損壞、或 skip-grant-tables 未生效。

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

  1. 停止 MySQL 服務
  2. 以 --skip-grant-tables 啟動:
    mysqld_safe --skip-grant-tables --skip-networking &
  3. 免密登入:mysql -u root
  4. 更新密碼:
    UPDATE mysql.user SET authentication_string=PASSWORD('newpwd') WHERE User='root';
    FLUSH PRIVILEGES;
  5. 正常重啟 MySQL

修復方案二:mysqladmin 命令列(需知舊密碼)

mysqladmin -u root -p'oldpwd' password 'newpwd'

修復方案三:GRANT 重新授權(已登入情況)

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'newpwd' WITH GRANT OPTION;
FLUSH PRIVILEGES;

常見誤區

MySQL 8.0+ 專用修復

-- 跳過權限啟動後
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpwd';
FLUSH PRIVILEGES;

預防檢查清單

  • 確認 user.Host 匹配客戶端連接來源(localhost vs 127.0.0.1 vs %)
  • 確認 user.plugin 為預期認證插件
  • 定期備份 mysql.user 表
  • 生產環境禁用 skip-grant-tables 啟動參數
copyright © 萬盛學電腦網 all rights reserved
現象真相
密碼確定正確但報錯可能是 plugin 欄位為 auth_socket(Linux 套接字認證),需改為 mysql_native_password
修改密碼後應用連不上應用用的是 root@% 而非 root@localhost,需同步修改所有 Host
Windows 服務啟動失敗配置檔路徑錯誤、datadir 權限、端口衝突,查看錯誤日誌