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

Windows 下 MySQL root 密碼忘記重置圖文教程

     編輯:MySQL 資料庫相關知識

一、 核心原理

以 --skip-grant-tables 參數啟動 MySQL 服務,跳過權限表驗證,無密碼登入後更新 mysql.user 表的 authentication_string(5.7+)或 password(5.6-)字段。

二、 步驟詳解(適用 MySQL 5.7/8.0)

1. 停止 MySQL 服務

# 方式一:服務管理器
Win+R → services.msc → 找到 MySQL → 右鍵停止
# 方式二:命令行(管理員權限)
net stop mysql

2. 跳過權限啟動 mysqld

# 在 bin 目錄下打開命令行(Shift+右鍵 → 此處打開 PowerShell/命令提示符)
mysqld --console --skip-grant-tables --shared-memory

⚠️ 保持該窗口開啟,看到 ready for connections 即成功。--shared-memory 避免端口衝突(可選)。

3. 新開窗口免密登入

mysql -u root

4. 更新密碼(MySQL 5.7+)

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!';

5. 重啟服務驗證

# 關閉 --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 方案
  • 密碼策略:長度 ≥12、含大小寫/數字/符號、定期輪換

五、 總結

Windows 下 MySQL root 密碼重置核心三步:停服務 → 跳過權限啟動 → 免密登入更新 user 表 → 正常重啟驗證。版本差異僅在更新語句字段/函數,按本文對應版本操作即可一次成功。建議收藏備查,並養成密碼管理器存儲習慣。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved