MySQL 忘記 root 密碼怎麼辦?VPS / CentOS 無法登入修復方法(ERROR 1045 完整教學|2026)

MySQL 忘記 root 密碼怎麼辦?VPS / CentOS 無法登入修復方法(ERROR 1045 完整教學|2026)
⚠ 重要注意事項

skip-grant-tables 會暫時關閉 MySQL 權限驗證機制,因此只能用於「緊急維修或密碼重置」情境,請勿長期使用。

完成密碼重置後,務必立即恢復正常啟動模式,以避免資料庫暴露風險。

在操作前建議先備份資料庫,並避免在正式生產環境隨意啟用此模式,以防止服務中斷或無法連線等問題。

本內容僅供系統管理、維運與故障排除用途使用。

在 CentOS 或 VPS(RHEL / Cloud Server)環境中,MySQL 忘記 root 密碼是非常常見的問題,通常會出現 ERROR 1045 Access denied。由於伺服器環境沒有 GUI,需要透過 systemctl 與 mysqld_safe 進行安全模式修復。

這篇屬於「伺服器 / VPS 緊急修復版本」,適用於 CentOS、RHEL、雲端主機環境,不同於 Windows 或一般 Linux 桌面環境。

✔ 常見問題情境

  • VPS 無法登入 MySQL(ERROR 1045)
  • root 密碼遺失
  • phpMyAdmin 無法連線資料庫
  • 伺服器重啟後 MySQL 無法登入

✔ Step 1:停止 MySQL 服務

sudo systemctl stop mysqld

✔ Step 2:啟動安全模式(skip-grant-tables)

sudo mysqld_safe --skip-grant-tables --skip-networking &

✔ 此模式會跳過 MySQL 權限驗證
✔ 僅用於緊急維修與密碼重置

✔ Step 3:登入 MySQL

mysql -u root

✔ Step 4:重置 root 密碼

⚠️ 指令順序更正:MySQL 5.7.6 以後(含 MySQL 8.0)有個容易誤踩的地雷:在 skip-grant-tables 模式下,必須先執行 FLUSH PRIVILEGES;,之後才能執行 ALTER USER,順序顛倒的話,ALTER USER 會直接跳出 ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement 而失敗。正確順序如下:
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword123!';
FLUSH PRIVILEGES;

第一次 FLUSH PRIVILEGES 是為了讓 ALTER USER 能正常執行;第二次則是讓密碼變更立即生效,兩次都建議保留。

✔ Step 5:重啟 MySQL 服務

sudo systemctl restart mysqld

✔ CentOS / VPS 重點差異

  • 服務名稱:mysqld
  • 必須使用 sudo 權限
  • 沒有 GUI,只能 CLI 操作

FAQ 常見問題

CentOS / VPS 忘記 MySQL root 密碼怎麼辦?
可以透過 systemctl stop mysqld 停止服務,再使用 skip-grant-tables 進入安全模式,登入後先執行 FLUSH PRIVILEGES,再使用 ALTER USER 重置密碼。
ERROR 1045 在 VPS 為什麼常發生?
通常是 root 密碼錯誤或權限表異常,並不代表 MySQL 損壞,可以透過安全模式修復。
skip-grant-tables 可以長期使用嗎?
不可以,這是維修模式,會關閉權限驗證,完成後必須立即關閉。
為什麼執行 ALTER USER 會出現 ERROR 1290?
這是 MySQL 5.7.6 以後版本的已知行為:在 skip-grant-tables 模式下,ALTER USER 必須先執行過 FLUSH PRIVILEGES 才能使用,順序顛倒就會出現 ERROR 1290 報錯。