首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL Root 密碼遺忘/重置完整指南:Windows 與 Linux 通用方案

     編輯:MySQL 綜合教學

MySQL Root 密碼找回與重置標準化操作手冊

Root 密碼遺忘是資料庫運維高頻場景。本文提供 Windows/Linux 通用的標準化重置流程,涵蓋跳過授權表啟動、密碼查看/修改、服務恢復、安全加固全鏈路,並針對 MySQL 5.7/8.0 認證體系變更給出對應方案。

一、核心原理:--skip-grant-tables 模式

  • 啟動時不載入授權表(mysql.user 等)
  • 允許無密碼、任意用戶連接,擁有最高權限
  • 極高風險:任何網路連接者可完全控制資料庫,必須配合防火牆/本地回環限制

二、Windows 環境操作步驟

:: 1. 以管理員身份開啟 CMD
:: 2. 強制終止 MySQL 服務進程
taskkill /f /im mysqld.exe
:: 或:net stop mysql

:: 3. 跳過授權表啟動(需在 MySQL bin 目錄下)
mysqld --skip-grant-tables --skip-networking
:: --skip-networking 關鍵:禁止網路連接,僅允許本地管道/共享內存

:: 4. 新開 CMD 視窗,無密碼直連
mysql -u root

:: 5. 在 MySQL 客戶端內執行:
-- 查看現有用戶與雜湊(MySQL 5.7+ authentication_string 欄位)
SELECT User, Host, authentication_string FROM mysql.user;

-- 修改 root 密碼(MySQL 5.7.6+ / 8.0)
UPDATE mysql.user SET authentication_string = PASSWORD('NewStrongPass123!') WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;

-- MySQL 5.7.6 前版本
UPDATE mysql.user SET Password = PASSWORD('NewStrongPass123!') WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;

三、Linux 環境操作步驟

# 1. 停止服務
systemctl stop mysqld
# 或:service mysql stop

# 2. 創建臨時配置文件(避免修改主配置)
cat > /tmp/mysqld_safe.cnf << 'EOF'
[mysqld]
skip-grant-tables
skip-networking
EOF

# 3. 以臨時配置啟動
mysqld_safe --defaults-file=/tmp/mysqld_safe.cnf &

# 4. 本地無密碼連接
mysql -u root

# 5. 同 Windows 步驟 5:查看/修改密碼

# 6. 重啟恢復正常模式
pkill mysqld
systemctl start mysqld
# 驗證新密碼
mysql -u root -p'NewStrongPass123!'

四、MySQL 8.0 特殊處理:caching_sha2_password 插件

項目操作說明
運行 mysql_secure_installation腳本引導移除匿名用戶、禁止遠程 root、移除 test 庫、重載權限
密碼複雜度validate_password 組件長度≥12、大小寫數字特殊字符、定期輪換
最小權限原則建立業務專用帳號僅授必要庫/表/列權限,嚴禁 root 供應用使用
審計日誌安裝 audit_log 插件記錄所有連接、查詢、DDL/DML 操作
網路隔離bind-address=127.0.0.1 / 防火牆禁止公網直連 3306
備份驗證mysqldump + 定期恢複演練確保密碼變更後備份腳本同步更新


六、常見問題排查

  • ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement:執行 FLUSH PRIVILEGES; 後重試
  • 密碼修改不生效:確認 Host 欄位匹配(localhost vs 127.0.0.1 vs %),建議三者同步修改
  • Windows 服務啟動失敗:檢查 my.ini 中 datadir、basedir 路徑、錯誤日誌
  • Docker 容器場景:docker exec -it container mysql -u root --skip-grant-tables 不支援,需 docker commit 修改啟動命令或掛載初始化 SQL

七、總結

Root 密碼重置核心在於 --skip-grant-tables + --skip-networking 安全啟動、精準更新 mysql.user 認證欄位、立即恢復正常模式並執行安全加固。建議將此流程封裝為自動化腳本(Ansible Playbook/Shell),納入應急預案演練體系,實現「分鐘級恢復、零風險操作」。

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