通過 --skip-grant-tables 參數啟動 MySQL 實例,跳過權限表驗證,以無密碼 root 身份進入控制台,直接更新 mysql.user 表中的密碼哈希值,最後正常重啟服務生效。
services.msc → MySQL → 停止,或 CMD net stop MySQLbin 目錄(例:C:\MySQL\bin)mysqld --skip-grant-tables
或編輯 my.ini 在 [mysqld] 區段添加 skip-grant-tables,再啟動服務。
mysqladmin -u root flush-privileges password "NewStrongP@ss!"
mysqladmin -u root -p shutdown
第二條命令會提示輸入新密碼,輸入上一條設置的密碼以關閉實例。
my.ini 中的 skip-grant-tables(如已添加),正常啟動 MySQL 服務mysql -u root -pkillall mysqld 或 systemctl stop mysqldmysqld_safe --skip-grant-tables &
mysql -u root-- MySQL 5.7.6+ / 8.0
UPDATE mysql.user SET authentication_string=PASSWORD('NewStrongP@ss!') WHERE User='root' AND Host='localhost';
-- MySQL 5.7.5 及之前
UPDATE mysql.user SET Password=PASSWORD('NewStrongP@ss!') WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
EXIT;
mysqladmin -u root -p shutdown
systemctl start mysqld
mysql -u root -p| 項目 | 說明 |
|---|---|
| 密碼哈希 | 必須使用 PASSWORD() 函數生成,絕不可寫入明文,否則導致「Host not allowed」等認證邏輯錯誤 |
| 安全窗口 | --skip-grant-tables 期間任何本地用戶均可無密碼 root 訪問,操作務必在內網隔離、最短時間內完成 |
| 僅限本地 | 此模式不影響網絡連接權限邏輯,遠程連接仍受權限表約束 |
| 服務無法停止 | 嘗試 mysqladmin -u root shutdown 或 kill -9 強制終止 |
| MySQL 8.0 新特性 | 採用 caching_sha2_password 默認認證插件,重置密碼後客戶端驅動需 8.0+ 版本支持 |
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass'; 修改密碼,避免直接操作系統表。