MySQL 權限驗證依賴 mysql.user 等系統表。啟動參數 --skip-grant-tables 使服務器不載入權限表,任何用戶無密碼即可連線並擁有所有權限,從而重置密碼。
## 方法 A: 直接前台運行 (調試方便) mysqld_safe --skip-grant-tables --skip-networking & ## 方法 B: 修改配置文件永久生效 (需重啟) # /etc/my.cnf [mysqld] skip-grant-tables skip-networking # systemctl restart mysqld ## 關鍵參數: # --skip-grant-tables: 跳過權限表 # --skip-networking: 禁用網絡連接 (安全,防止外部無密碼訪問)
## 停止跳過權限模式實例 pkill -9 mysqld ## 移除配置文件中的 skip-grant-tables (如修改過) # 重啟正常服務 systemctl start mysqld ## 驗證新密碼 mysql -uroot -p'NewStrongPass123!' -e "SELECT VERSION();"
## 管理員 CMD cd /d D:\MySQL\mysql-5.6.29\bin mysqld --skip-grant-tables --skip-networking --console
## 關閉 --console 窗口 (Ctrl+C) net start MySQL56 mysql -uroot -pNewStrongPass123!
## 指定配置文件與數據目錄 mysqld_safe --defaults-file=/data/mysql3306/my.cnf --skip-grant-tables --skip-networking --datadir=/data/mysql3306/data &
風險 說明 防範
無密碼全權限訪問 --skip-grant-tables 期間任何人可連線操作必加 --skip-networking、限制本地 Unix Socket、盡快結束
權限表損壞 手動 UPDATE 可能導致權限不一致 優先用 ALTER USER / SET PASSWORD,最後才直改表
複製環境破壞 主庫重置密碼後從庫同步失敗 主從同步重置、或從庫同步修改
應用連線中斷 應用配置舊密碼導致報錯 協調應用端同步修改配置、重啟
預防性措施
- 密碼管理器存儲:1Password、Bitwarden、KeePass 等
- 定期輪換機制:自動化腳本 + 通知
- 備用管理員賬號:建立
admin@localhost 高權限備用賬號
- 文檔記錄:運行手冊記錄重置流程、聯繫人
總結
MySQL Root 密碼重置核心:停服務 → --skip-grant-tables --skip-networking 啟動 → 無密登入 → ALTER USER/UPDATE user 設置新密 → 重啟正常模式驗證。關鍵安全點:**必須加 --skip-networking 禁用網絡**,防止重置窗口期被惡意利用。生產環境操作需納入變更管理流程,雙人複核、記錄審計。