MySQL 5.5 是眾多企業生產環境的主力版本。本文提供兩種經實測的 Windows 環境重置方案,含完整命令列操作、任務管理器進程處理、服務重啟驗證全流程,並附帶常見錯誤排查,確保一次成功。
C:\Users\Administrator> cd "C:\Program Files\MySQL\MySQL Server 5.5\bin"
C:\Program Files\MySQL\MySQL Server 5.5\bin> net stop mysql
MySQL 服務正在停止.
MySQL 服務已成功停止。
C:\Program Files\MySQL\MySQL Server 5.5\bin> mysqld --skip-grant-tables
視窗會停留在閃爍游標狀態,表示 mysqld 已在前景運行,**請勿關閉此視窗**。
C:\Program Files\MySQL\MySQL Server 5.5\bin> mysql
Welcome to the MySQL monitor...
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
mysql> USE mysql;
Database changed
mysql> UPDATE user SET password=PASSWORD('oracle') WHERE User='root';
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
mysql> QUIT
Bye
mysqld.exe → 結束工作
C:\Program Files\MySQL\MySQL Server 5.5\bin> net start mysql
MySQL 服務正在啟動 .
MySQL 服務已經啟動成功。
C:\Program Files\MySQL\MySQL Server 5.5\bin> mysql -uroot -poracle
Welcome to the MySQL monitor...
mysql>
REM 1. 停止服務並清理殘留進程
net stop mysql
REM 任務管理器檢查並結束所有 mysqld.exe
REM 2. 跳過授權表啟動
mysqld.exe --skip-grant-tables
REM 視窗卡住,另開視窗
REM 3. 登入改密
mysql
mysql> USE mysql;
mysql> UPDATE user SET password=PASSWORD('new_password') WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> QUIT
REM 4. 結束 mysqld.exe 進程
REM 任務管理器結束
REM 5. 重啟服務並驗證
net start mysql
mysql -u root -pnew_password
that's all.

為什麼必須結束 mysqld.exe 進程?
--skip-grant-tables是前景進程,非服務模式。若不結束直接net start mysql,會導致端口 3306 衝突,服務啟動失敗或啟動的是舊進程(仍處於免密模式),新密碼不生效。
| 錯誤現象 | 原因 | 解決 |
|---|---|---|
ERROR 1045 (28000): Access denied | 未在 skip-grant-tables 模式下,或未結束舊進程 | 確認 mysqld 視窗仍在運行,任務管理器無殘留 mysqld.exe |
UPDATE 0 rows affected | Host 欄位不匹配 | SELECT User, Host FROM user; 確認所有 root 帳號 Host 值,逐一更新 |
net start mysql 失敗 | 端口被佔用 / 配置檔錯誤 / 數據目錄權限 | 檢查 3306 端口、錯誤日誌 .err、datadir 權限 |
| 密碼修改後仍無法登入 | 未執行 FLUSH PRIVILEGES 或權限快取未刷新 | 必須執行 FLUSH PRIVILEGES;重啟服務可強制刷新 |
# 1. 停止服務
service mysql stop
# 或 systemctl stop mysqld
# 2. 跳過授權表啟動
mysqld_safe --skip-grant-tables --skip-networking &
# 3. 改密
mysql -u root
mysql> USE mysql;
mysql> UPDATE user SET password=PASSWORD('newpass') WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> QUIT
# 4. 重啟
service mysql restart
# 或 systemctl restart mysqld
password,使用 PASSWORD() 函數ALTER USER 語句(5.7+ 引入)C:\Program Files\MySQL\MySQL Server 5.5\實戰口訣:停服務 → 開 mysqld 免密視窗 → 新視窗改密 → 殺 mysqld 進程 → 起服務 → 驗證新密。核心陷阱只有一個:**必須手動結束 --skip-grant-tables 的 mysqld.exe 進程**,否則服務無法正常接管端口。