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

MySQL Root 密碼遺忘?5 分鐘重置完全指南

     編輯:MySQL 資料庫相關知識

前言

MySQL Root 密碼遺忘是 DBA 與開發人員的常見痛點。本文提供標準、安全、跨平台(Linux/Windows)的重置流程,涵蓋 MySQL 5.7、8.0 版本差異,並說明原理與注意事項。

核心原理

跳過權限表驗證(--skip-grant-tables)啟動 MySQL 服務 → 以無密碼 Root 登入 → 更新 mysql.user 表的 authentication_string 欄位 → 刷新權限 → 正常重啟服務。

Linux 環境重置步驟

1. 停止 MySQL 服務

systemctl stop mysqld
# 或
service mysql stop

2. 建立臨時配置啟用 skip-grant-tables

mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld

# 建立臨時配置檔(避免修改主配置)
cat > /etc/my.cnf.d/skip-grant.cnf <<'EOF'
[mysqld]
skip-grant-tables
skip-networking  # 僅本地連線,提高安全性
EOF

3. 啟動 MySQL

systemctl start mysqld

4. 無密碼登入並修改密碼

mysql -u root

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

-- MySQL 8.0+ (authentication_string 不再用 PASSWORD())
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
FLUSH PRIVILEGES;

EXIT;

5. 恢復正常模式並重啟

rm /etc/my.cnf.d/skip-grant.cnf
systemctl restart mysqld

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

Windows 環境重置步驟

  1. 以管理員身分打開 CMD/PowerShell,停止服務:net stop mysql(或 MySQL80 等服務名)
  2. 建立臨時初始化檔 C:\mysql-init.txt 內容:
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
  3. 以跳過權限表方式手動啟動 mysqld:
    cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
    mysqld --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" --init-file=C:\mysql-init.txt --console
  4. 等待啟動完成(Console 顯示 ready for connections),新密碼已生效。Ctrl+C 停止,刪除 init 檔,正常啟動服務:net start mysql

MySQL 8.0 關鍵變更提醒

  • PASSWORD() 函數已移除:不能再用 UPDATE ... SET authentication_string = PASSWORD(...),必須用 ALTER USER ... IDENTIFIED BY ... 或 SET PASSWORD FOR 'root'@'localhost' = '...'。
  • 預設認證插件:caching_sha2_password,舊版客戶端可能需指定 --default-auth=mysql_native_password 或建立用戶時指定 IDENTIFIED WITH mysql_native_password BY 'pwd'。
  • 密碼策略:預設啟用 validate_password 元件,新密碼需滿足長度、大小寫、數字、特殊字符要求。

安全加固建議(重置後必做)

  1. 執行安全腳本:mysql_secure_installation(移除匿名用戶、禁止 Root 遠程登入、移除 test 資料庫)
  2. 建立專用管理用戶:避免直接使用 Root,授予必要權限:CREATE USER 'dba'@'%' IDENTIFIED BY '...'; GRANT ALL PRIVILEGES ON *.* TO 'dba'@'%' WITH GRANT OPTION;
  3. 配置密碼輪換策略:定期更換、審計日誌、啟用 SSL 連線。
  4. 備份 grant 表:mysqldump --system=mysql -u root -p mysql user db > grants_backup.sql

常見問題排查

現象原因解決
skip-grant-tables 啟動後無法連線skip-networking 生效、socket 路徑錯誤指定 --protocol=tcp --port=3306 或正確的 --socket 路徑
UPDATE user 後 FLUSH PRIVILEGES 報錯MySQL 8.0 權限表結構變更改用 ALTER USER 或 SET PASSWORD 語法
Windows --init-file 不生效路徑含空格、反斜線轉義、權限不足用雙引號包裹路徑、用正斜線 /、以管理員運行
重置後應用連線失敗應用配置文件仍用舊密碼同步更新應用配置、連接池、Spring Cloud Config 等

結語

Root 密碼重置本質是「繞過認證 → 修改憑證 → 恢復認證」。熟練掌握各版本、各平台的標準流程,配合事後安全加固,能將事故影響降至最低。建議將重置腳本納入運維手冊,定期演練,並推廣「無 Root 運維」模式(專用賬號 + 最小權限 + 審計)。

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