Windows 環境下 MySQL root 密碼遺失是高頻運維場景。本文提供經實測的「跳過授權表啟動 → 空密碼登錄 → 更新密碼 → 刷新權限 → 正常重啟」標準流程,兼容 MySQL 5.7/8.0,附路徑含空格處理、常見報錯排查。
D:\Program Files\MySQL\MySQL Server 8.0\)D:
cd "D:\Program Files\MySQL\MySQL Server 8.0\bin"
# 雙引號包裹含空格路徑,關鍵!
mysqld --console --skip-grant-tables --shared-memory
# --console 前台輸出日誌,便於觀察
# --shared-memory 避免端口衝突 (可選)
# 看到 "ready for connections" 即成功
⚠️ MySQL 8.0 必須加 --shared-memory 或指定 --port,否則默認端口被佔用會啟動失敗。
D:
cd "D:\Program Files\MySQL\MySQL Server 8.0\bin"
mysql -u root -p
# 提示 Enter password: 直接按 Enter (空密碼)
MySQL 5.7:
UPDATE mysql.user SET authentication_string = PASSWORD('NewStrongPass123') WHERE User = 'root';
FLUSH PRIVILEGES;
MySQL 8.0: (密碼列改為 authentication_string,採用 caching_sha2_password)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123';
FLUSH PRIVILEGES;
# 方式一:服務管理器
services.msc → MySQL80 → 右鍵啟動
# 方式二:命令行 (需管理員權限)
net start MySQL80
# 驗證
mysql -u root -p
# 輸入新密碼 NewStrongPass123 登錄成功
| 現象 | 原因 | 解決 |
|---|---|---|
ERROR 1045 (28000): Access denied 即使用 --skip-grant-tables | 未加 --shared-memory 導致端口衝突,實際連上舊實例 | 加 --shared-memory 或 --port=3307 區分端口 |
Unknown column 'password' (5.7/8.0 更新語句報錯) | 密碼列名變更:5.7 authentication_string、8.0 建議用 ALTER USER | 用版本對應 SQL,見上文 |
路徑含空格 cd 失效 | 未加雙引號 | cd "D:\Program Files\MySQL\MySQL Server 8.0\bin" |
| 重置後仍報 1045 | 未 FLUSH PRIVILEGES 或未重啟正常服務 | 執行 FLUSH PRIVILEGES → 關閉臨時實例 → net start 正常服務 |
進 bin 目錄、雙引號路徑、skip-grant-tables 加 shared-memory、新窗口空密碼登、ALTER USER 改密碼、FLUSH PRIVILEGES、關臨時啟正常、驗證新密碼。收藏備用,關鍵時刻救命。