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

Windows 環境 MySQL 5.1 Root 密碼遺忘重置圖文教程 (--skip-grant-tables 法)

     編輯:MySQL 資料庫相關知識

Root 密碼忘記?不用慌,三步驟安全重置

適用版本:MySQL 5.1 / 5.5 / 5.6 / 5.7 (Windows)。核心原理:啟動時跳過權限表檢查 (`--skip-grant-tables`),以免密碼登入,更新 `mysql.user` 表重置密碼,再正常重啟服務。

⚠️ 安全警示: `--skip-grant-tables` 會暫時移除所有認證授權,**任何人可無密碼連線並擁有最高權限**。執行期間請:

  • 確保伺服器防火牆封鎖 3306 對外連線。
  • 僅在本機 `localhost` 操作,勿開放遠端。
  • 完成後立即正常重啟服務,恢復權限檢查。

前置檢查

  1. 確認 MySQL 服務狀態:`net start | find "MySQL"` 或服務管理器 (services.msc)。
  2. 若服務運行中,先停止:net stop mysql (或服務管理器停止)。

步驟 1:以跳過權限模式啟動 mysqld (保持視窗開啟)

  1. 開啟 **命令提示字元 (cmd) 視窗 1** (建議以系統管理員執行)。
  2. 切換到 MySQL `bin` 目錄:cd "C:\Program Files\MySQL\MySQL Server 5.1\bin"
  3. 執行啟動命令 (根據實際 `my.ini` 路徑調整):
    mysqld --defaults-file="C:\Program Files\MySQL\MySQL Server 5.1\my.ini" --console --skip-grant-tables
  4. 視窗會停留在前景運行,**不要關閉此視窗**,這是臨時 MySQL 服務進程。

步驟 2:無密碼登入並更新密碼 (新開視窗 2)

  1. 開啟 **另一個 cmd 視窗 2**。
  2. 連線無需密碼 (直接按 Enter):
    mysql -u root -p
    Enter password: (直接按 Enter)
  3. 進入 mysql 系統庫並更新密碼:
    USE mysql;
    UPDATE user SET Password = PASSWORD('NewStrongPass123!') WHERE User = 'root';
    FLUSH PRIVILEGES;
    QUIT;

    MySQL 5.7+ `Password` 欄位改為 `authentication_string`,語法:UPDATE user SET authentication_string = PASSWORD('...') WHERE User='root'; 或 ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass'; (需權限表生效,故仍需 skip-grant-tables 先用 UPDATE)。

步驟 3:正常重啟服務驗證

  1. 關閉視窗 1 (按 `Ctrl+C` 停止 `--skip-grant-tables` 進程)。
  2. 正常啟動服務:net start mysql
  3. 驗證新密碼:mysql -u root -p → 輸入新密碼 → 登入成功。

常見問題排查

現象原因解決
視窗 1 閃退路徑錯誤、my.ini 遺失、埠被佔用檢查路徑、改用 `--console` 看錯誤輸出、`netstat -ano | findstr 3306`
視窗 2 連線失敗 "Can't connect"視窗 1 mysqld 未就緒、埠不對、命名管道/共享記憶體衝突等待視窗 1 顯示 "ready for connections"、指定 `--protocol=tcp --port=3306`
UPDATE 0 rows affectedUser 非 'root'、Host 不匹配 (如 'root'@'127.0.0.1')SELECT User, Host FROM user; 確認確切 Host,WHERE 條件加上 Host
密碼修改後仍無法登入未執行 FLUSH PRIVILEGES、未正常重啟服務、快取舊密碼必須 FLUSH PRIVILEGES、關閉 skip-grant-tables 進程、net start mysql 正常啟動

MySQL 8.0+ 變化提醒

  • `PASSWORD()` 函數已移除,改用 `ALTER USER` 或直接更新 `authentication_string`。
  • 預設認證插件為 `caching_sha2_password`,舊版驅動可能需指定 `mysql_native_password`。
  • 流程邏輯相同,僅 SQL 語法微調。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved