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

MySQL Root 密碼忘記?三步重置 Root 密碼通用方案 (Linux/Windows)

     編輯:MySQL 資料庫相關知識

MySQL Root 密碼忘記?三步重置通用方案

Root 密碼遺忘是 MySQL 運維最高頻應急場景。本文提供 Linux/Windows 通用的標準化重置流程:跳過權限表啟動 → 無密登入更新密碼 → 恢復配置重啟驗證,並針對 5.7/8.0 語法差異、mysqld_safe 守護進程陷阱、Windows 服務模式給出專項指引。

核心原理

MySQL 權限驗證發生在連接階段。啟動參數 --skip-grant-tables 使服務器跳過授權表載入,任何用戶無密碼即可連接並擁有所有權限。此時更新 mysql.user 表的 authentication_string (5.7) 或 Password (8.0) 列,重啟正常模式即生效。

Linux 環境通用步驟

1. 停止服務 (優雅關閉,刷盤)

# Systemd
systemctl stop mysqld

# 若使用 mysqld_safe 守護進程,需先殺守護進程再殺 mysqld
pkill -f mysqld_safe
pkill -f mysqld
# 或
kill -TERM $(cat /var/run/mysqld/mysqld.pid)  # 優雅關閉
# 切勿 kill -9 除非極端卡死,否則數據可能不一致

2. 跳過權限表啟動 (後台、禁用網絡)

mysqld_safe --skip-grant-tables --skip-networking --user=mysql &

# 驗證啟動成功
sleep 3
mysql -u root -e "SELECT 1;"

3. 更新密碼 (版本差異)

# MySQL 8.0+
mysql -u root -e "
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewRootPass123!';
"

# MySQL 5.7
mysql -u root -e "
FLUSH PRIVILEGES;
UPDATE mysql.user SET authentication_string=PASSWORD('NewRootPass123!') WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
"

# MariaDB 10.2+
mysql -u root -e "
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewRootPass123!');
FLUSH PRIVILEGES;
"

4. 恢復正常模式重啟

# 停止 skip-grant-tables 實例
mysqladmin -u root -p'NewRootPass123!' shutdown
# 或
pkill -f mysqld

# 正常啟動
systemctl start mysqld
# 或
mysqld_safe --user=mysql &

# 驗證新密碼
mysql -u root -p'NewRootPass123!' -e "SELECT USER(), VERSION();"

Windows 環境步驟

# 1. 停止服務 (管理員 CMD/PowerShell)
net stop MySQL80
# 或
sc stop MySQL80

# 2. 命令行跳過權限啟動 (控制台模式,可見日誌)
cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
mysqld --skip-grant-tables --skip-networking --console

# 3. 新開 CMD 視窗無密登入更新密碼
mysql -u root
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewRootPass123!';
QUIT;

# 4. 關閉控制台實例 (Ctrl+C 或 Ctrl+Break)
# 5. 正常啟動服務
net start MySQL80

# 6. 驗證
mysql -u root -pNewRootPass123! -e "SELECT VERSION();"

常見陷阱與避坑

應急預案清單 (建議納入運維手冊)

  1. 確認 MySQL 版本、安裝路徑、數據目錄、Socket 路徑、服務名。
  2. 準備強密碼生成器 (如 `openssl rand -base64 16`)。
  3. 演練步驟:季度實戰演練,記錄耗時,目標 < 10 分鐘恢復。
  4. 事後複盤:根因分析 (人為誤操作/自動化腳本缺陷/離職交接缺失),整改措施落地。

Root 密碼重置是 DBA 的「心肺復甦術」。標準化流程、版本差異清單、陷阱避坑、定期演練,讓應急響應從「手忙腳亂」變為「肌肉記憶」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
陷阱現象解決
mysqld_safe 守護進程自動重啟kill mysqld 後立即重生先 kill mysqld_safe 父進程,再 kill mysqld
忘記 FLUSH PRIVILEGES密碼更新但不生效更新語句前後必須 FLUSH PRIVILEGES (8.0 ALTER USER 自動刷新,但保留習慣無害)
Windows 控制台關閉導致進程結束關閉 CMD 視窗 mysqld 退出用 --console 保持前台,或開兩個 CMD 視窗
8.0 authentication_string vs PasswordUPDATE mysql.user SET Password=... 不生效8.0 用 ALTER USER 或 UPDATE authentication_string
密碼策略拒絕弱密碼ERROR 1819 (HY000)密碼 ≥12 位、大小寫、數字、特殊字符;或暫時降低 validate_password 等級