⚠ 重要注意事項
skip-grant-tables 會暫時關閉 MySQL 權限驗證機制,因此只能用於「緊急維修或密碼重置」情境,請勿長期使用。
完成密碼重置後,務必立即恢復正常啟動模式,以避免資料庫暴露風險。
在操作前建議先備份資料庫,並避免在正式生產環境隨意啟用此模式,以防止服務中斷或無法連線等問題。
本內容僅供系統管理、維運與故障排除用途使用。
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 報錯。
