啟動 MySQL 時加入 --skip-grant-tables,**跳過權限表驗證**,以任意用戶無密碼登入,進而更新 mysql.user 表重置密碼。
net stop mysql # 或任務管理器結束 mysqld.exe # 或 services.msc 停止 MySQL 服務
cd "C:\Program Files\MySQL\MySQL Server 5.5\bin" mysqld --console --skip-grant-tables # 視窗保持開啟,勿關閉
cd "C:\Program Files\MySQL\MySQL Server 5.5\bin" mysql -u root # 進入 mysql> 提示符
USE mysql;
UPDATE `user` SET `Password` = PASSWORD('123456') WHERE `User` = 'root';
FLUSH PRIVILEGES;
# 關閉 --skip-grant-tables 視窗 (Ctrl+C) # 正常啟動服務 net start mysql # 或 services.msc 啟動
mysql -u root -p123456
| 方法 | 命令 | 適用場景 |
|---|---|---|
| mysqladmin | mysqladmin -u root -p'old' password 'new' | 命令列快速修改 |
| SET PASSWORD | SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new'); | SQL 介面、腳本自動化 |
| UPDATE user 表 | UPDATE mysql.user SET Password=PASSWORD('new') WHERE User='root'; FLUSH PRIVILEGES; | 批量、復雜條件 |
Password 欄位改為 authentication_stringcaching_sha2_password,舊客戶端需指定 mysql_native_passwordALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; FLUSH PRIVILEGES;
validate_password 元件強制密碼複雜度。Windows 下忘記 MySQL root 密碼,**--skip-grant-tables + 更新 mysql.user + FLUSH PRIVILEGES** 是標準流程。掌握三種日常修改密碼方法,配合 MySQL 8.0 新語法差異,做到有備無患。