首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL ERROR 1045 存取被拒:兩種重設 root 密碼實戰方案

     編輯:MySQL 資料庫相關知識

MySQL 錯誤代碼 1045 (Access denied for user 'root'@'localhost') 代表帳號密碼驗證失敗,最常見原因是遺忘 root 密碼。本文提供兩種經實測有效的重設方案,適用於 Linux 環境(Debian/Ubuntu 系列),Windows 使用者請參考官方文件以 --init-file 方式處理。

方案一:利用 debian-sys-maint 維護帳號(推薦,無需停機)

Debian 系列安裝 MySQL 時會自動建立 debian-sys-maint 維護帳號,其密碼儲存於 /etc/mysql/debian.cnf。此帳號擁有完整權限,可直接登入修改 root 密碼,且不需停止 MySQL 服務,業務零中斷。

操作步驟

  1. 讀取維護帳號密碼:
    sudo cat /etc/mysql/debian.cnf
    找到 [client] 區塊下的 user = debian-sys-maint 與 password = xxx。
  2. 以維護帳號登入 MySQL:
    mysql -u debian-sys-maint -p
    輸入上一步取得的密碼。
  3. 更新 root 密碼並重新載入權限:
    UPDATE mysql.user SET authentication_string=PASSWORD('新密碼') WHERE User='root';
    FLUSH PRIVILEGES;
    QUIT;
    注意: MySQL 5.7+ 欄位為 authentication_string,5.6 及舊版為 Password。
  4. 驗證新密碼:
    mysql -u root -p
    輸入新設定的密碼,成功登入即完成重設。

方案二:跳過權限表啟動(通用,需短暫停機)

適用於無 debian-sys-maint 帳號或該帳號亦失效的情況。核心原理:以 --skip-grant-tables 參數啟動 MySQL,暫時繞過權限驗證,修改密碼後重啟恢復正常模式。

操作步驟

  1. 停止 MySQL 服務:
    sudo /etc/init.d/mysql stop
    或 sudo systemctl stop mysql(systemd 系統)。
  2. 以跳過權限模式啟動 MySQL(背景執行):
    sudo mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
    • --skip-networking 防止外部連入,提升安全性。
    • & 讓進程在背景執行,保留終端機操作。
  3. 免密碼登入並修改密碼:
    mysql -u root mysql
    UPDATE user SET authentication_string=PASSWORD('新密碼') WHERE User='root';
    FLUSH PRIVILEGES;
    QUIT;
  4. 重啟 MySQL 服務恢復正常驗證:
    sudo /etc/init.d/mysql restart
  5. 驗證新密碼:
    mysql -u root -p

常見坑點與對策

現象原因解決方式
UPDATE 語法錯誤MySQL 版本差異導致欄位名不同先執行 DESC mysql.user; 確認密碼欄位名稱
方案二修改後仍無法登入未執行 FLUSH PRIVILEGES 或服務未重啟務必執行 FLUSH PRIVILEGES 並完整重啟服務
Plugin 欄位為 auth_socketUbuntu 18.04+ 預設使用 auth_socket 外掛同步修改 plugin 欄位為 mysql_native_password

最佳實踐建議

  • 生產環境嚴禁使用 root 直接連線應用程式,應建立專用帳號並授予最小權限。
  • 密碼管理採用密碼管理器(如 Bitwarden、1Password),避免遺忘。
  • 定期演練災難恢復流程,包含密碼重設、備份還原。
  • MySQL 8.0+ 建議使用 ALTER USER 'root'@'localhost' IDENTIFIED BY '新密碼'; 語法。

掌握這兩種方案,下次遇到 ERROR 1045 即可從容應對,快速恢復資料庫存取權限。

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