萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

Windows Server 2003/2008/2012/2016/2019 MySQL root 密碼重置圖文教程

遺忘 MySQL root 密碼是常見運維場景。本文提供 **Windows 全版本** 通用的跳過權限表重置密碼流程,含圖文步驟、命令行操作、服務管理、驗證登入全過程。

核心原理

以 --skip-grant-tables 參數啟動 MySQL,**跳過權限系統驗證**,以空密碼 root 登入,更新 mysql.user 表的 authentication_string(5.7+)或 Password(5.6),刷新權限,重啟正常模式。

步驟詳解

1. 停止 MySQL 服務


# 方式一:服務管理器
services.msc → 找到 MySQL / MySQL80 → 右鍵「停止」

# 方式二:命令列(管理員權限)
net stop mysql
net stop MySQL80

# 方式三:任務管理器殺進程
taskkill /f /im mysqld.exe

2. 跳過權限表啟動 mysqld


# 打開 CMD(管理員),切換到 MySQL bin 目錄
cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"

# 啟動跳過權限表(控制台前台運行,保持視窗開啟)
mysqld --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" --console --skip-grant-tables

# 關鍵參數:
# --defaults-file: 指定配置檔路徑(必須絕對路徑,含空格需加引號)
# --console: 輸出日誌到控制台
# --skip-grant-tables: 跳過權限表,允許無密碼 root 登入

⚠️ **此視窗不可關閉**,關閉即停止 mysqld 進程。

3. 新開 CMD 視窗,無密碼登入


cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
mysql -u root -p
# 提示 Enter password: 直接按 Enter(空密碼)

4. 更新 root 密碼


-- 切換到 mysql 系統庫
USE mysql;

-- MySQL 5.7+ / 8.0:authentication_string 欄位
UPDATE user SET authentication_string = PASSWORD('NewPass123!') WHERE User = 'root' AND Host IN ('localhost', '127.0.0.1', '::1', '%');

-- MySQL 5.6:Password 欄位
-- UPDATE user SET Password = PASSWORD('NewPass123!') WHERE User = 'root';

-- 刷新權限(必須)
FLUSH PRIVILEGES;

-- 退出
QUIT;

5. 重啟 MySQL 正常模式驗證


# 關閉 --skip-grant-tables 的 mysqld 控制台(Ctrl+C 或關閉視窗)
# 正常啟動服務
net start mysql
# 或 services.msc 啟動

# 驗證新密碼登入
mysql -u root -p
Enter password: NewPass123!
# 成功進入 mysql> 提示符

常見問題與解決

問題原因解決
mysqld 啟動即閃退配置檔路徑錯誤、datadir 權限、端口佔用檢查 --defaults-file 路徑;以管理員運行;netstat -an | findstr 3306
ERROR 1290: The MySQL server is running with --skip-grant-tables未執行 FLUSH PRIVILEGES執行 FLUSH PRIVILEGES 後再 UPDATE
密碼策略不滿足validate_password 元件要求複雜度密碼含大小寫、數字、特殊符號、長度≥8;或暫時降低策略 SET GLOBAL validate_password.policy=LOW
Host '%' 不存在root 只有 localhost/127.0.0.1WHERE 子句加上實際 Host 值,或新增 '%' 宿主

替代方法:mysqld-nt --skip-grant-tables(舊版 5.1/5.5)


# 舊版無 mysqld.exe,只有 mysqld-nt.exe
mysqld-nt --skip-grant-tables
# 後續步驟相同

安全建議

  1. 重置後**立即移除 --skip-grant-tables 重啟**,否則任意用戶可無密碼登入。
  2. 建立**專用應用帳號**,最小權限,禁用 root 遠程登入:UPDATE user SET Host='127.0.0.1' WHERE User='root'; FLUSH PRIVILEGES;
  3. 啟用 validate_password 強制複雜度。
  4. 定期輪換密碼,存入密碼管理器(Bitwarden、1Password、KeePass)。
copyright © 萬盛學電腦網 all rights reserved