首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL Root 密碼忘記?--skip-grant-tables 緊急重置 3 步走

     編輯:MySQL 資料庫相關知識

核心原理

mysqld_safe --skip-grant-tables 啟動時不載入權限表,任何用戶均可無密碼以任意身份 (含 root) 連接並擁有所有權限。屬緊急手段,**務必配合 --skip-networking 禁止外部連接**。

標準流程 (Linux/macOS)

# 1. 停止服務
systemctl stop mysqld

# 2. 跳過權限表啟動 (前台運行,另開終端操作第 3 步)
mysqld_safe --skip-grant-tables --skip-networking &

# 3. 免密登入並改密
mysql -u root
# 進入 mysql> 交互模式

-- 5.7.6+ / 8.0
FLUSH PRIVILEGES;  -- 8.0 必須先執行
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';

-- 5.6 / 5.7.5
UPDATE mysql.user SET Password = PASSWORD('NewStrongPass123!') WHERE User = 'root';
FLUSH PRIVILEGES;

# 4. 關閉臨時實例,正常重啟
mysqladmin -u root -p shutdown  # 輸入新密碼
systemctl start mysqld

# 5. 驗證
mysql -u root -p'NewStrongPass123!' -e "SELECT 'OK';"

Windows 圖解步驟

  1. 管理員 CMD:net stop mysql (或服務管理器停止)。
  2. 進入安裝目錄 bin:cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"。
  3. 啟動臨時實例:mysqld --console --skip-grant-tables --skip-networking (窗口保持開啟)。
  4. 新開 CMD:mysql -u root → 執行上述 SQL 修改密碼。
  5. Ctrl+C 關閉第 3 步窗口 → net start mysql。

版本差異速查

版本密碼列修改語句注意
8.0 / 5.7.6+authentication_stringALTER USER ... IDENTIFIED BY必須先 FLUSH PRIVILEGES;PASSWORD() 棄用
5.6 / 5.7.5PasswordUPDATE ... SET Password = PASSWORD(...)直接 UPDATE
5.5 及更早PasswordUPDATE ... SET Password = PASSWORD(...)同 5.6

常見坑

  • 未加 --skip-networking:全網暴露無密 root,極度危險。
  • 8.0 直接 UPDATE authentication_string:需手動構造 SHA256 哈希,極易出錯,請用 ALTER USER。
  • Host 不匹配:'root'@'127.0.0.1' vs 'root'@'localhost',建議全改:WHERE User='root'。
  • 權限表損壞:極少見,若 FLUSH PRIVILEGES 報錯,需從備份恢復 mysql 库。

預防建議

  1. 密碼管理器存儲 (Bitwarden, 1Password, KeePass)。
  2. 配置 validate_password 強制複雜度、過期輪換。
  3. 啟用審計日誌記錄登入嘗試。
  4. 建立只讀/低權限運維賬號,禁用 root 遠程登入。

總結

Root 密碼遺失不恐慌,停服務 → skip-grant-tables+skip-networking 啟動 → 免密登入 → ALTER USER 改密 → 正常重啟,全程 < 3 分鐘。關鍵細節:8.0 必須先 FLUSH PRIVILEGES、務必加 skip-networking、驗證所有 root@host 均已同步修改。事後納入密碼輪換體系,杜絕下次「忘記」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved