以 --skip-grant-tables 參數啟動 MySQL 服務,跳過權限表驗證,無密碼登入後更新 mysql.user 表的 authentication_string(5.7+)或 password(5.6-)字段。
# 方式一:服務管理器 Win+R → services.msc → 找到 MySQL → 右鍵停止 # 方式二:命令行(管理員權限) net stop mysql
# 在 bin 目錄下打開命令行(Shift+右鍵 → 此處打開 PowerShell/命令提示符) mysqld --console --skip-grant-tables --shared-memory
⚠️ 保持該窗口開啟,看到 ready for connections 即成功。--shared-memory 避免端口衝突(可選)。
mysql -u root
USE mysql;
-- 5.7/8.0 字段名為 authentication_string
UPDATE user SET authentication_string = PASSWORD('NewPass123!') WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;
EXIT;
MySQL 8.0 注意:默認加密插件為 caching_sha2_password,PASSWORD() 函數已移除,需用:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
# 關閉 --skip-grant-tables 窗口 (Ctrl+C) net start mysql # 測試新密碼 mysql -u root -p # 輸入 NewPass123! 登入成功
| 現象 | 原因 | 對策 |
|---|---|---|
| mysqld 啟動即退出 | 數據目錄權限/配置錯誤 | 查看錯誤日誌 .err 文件 |
| UPDATE 不生效 | 字段名版本差異 | 5.7+ 用 authentication_string,8.0 用 ALTER USER |
| FLUSH PRIVILEGES 報錯 | --skip-grant-tables 下部分權限受限 | 8.0 直接 ALTER USER 無需 FLUSH |
| 端口被佔用 | 原服務未完全停止 | 任務管理器殺掉 mysqld 進程 |
mysql_secure_installation:移除匿名用戶、禁止 root 遠程登錄、刪除 test 庫skip-grant-tables 重置,改用官方 mysqld --init-file 方案Windows 下 MySQL root 密碼重置核心三步:停服務 → 跳過權限啟動 → 免密登入更新 user 表 → 正常重啟驗證。版本差異僅在更新語句字段/函數,按本文對應版本操作即可一次成功。建議收藏備查,並養成密碼管理器存儲習慣。