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

MySQL Root 密碼遺忘緊急重置指南:Linux/Windows 雙平台實戰

     編輯:MySQL 綜合教學

跳過授權表啟動模式下重置 MySQL Root 密碼標準作業程序

Root 密碼遺忘是資料庫運維高頻事故。核心原理:以 --skip-grant-tables 參數啟動 MySQL,暫時繞過權限驗證,直接更新 mysql.user 表修改密碼雜湊值。本文提供 Linux 與 Windows 完整操作步驟、常見坑點與驗證清單。

核心原理圖解

正常啟動:mysqld → 載入 grant tables → 驗證密碼 → 允許/拒絕連線
緊急模式:mysld --skip-grant-tables → 不載入 grant tables → 無密碼直連 → 直接 UPDATE user 表 → FLUSH PRIVILEGES → 正常重啟

Linux 平台操作步驟

  1. 停止現有 MySQL 服務
    systemctl stop mysqld
    # 或 service mysqld stop
    # 確認進程已終結
    ps aux | grep mysqld
  2. 以跳過授權模式啟動
    # 前台運行(方便觀察日誌),另開終端機操作
    mysqld_safe --skip-grant-tables --skip-networking &

    --skip-networking 僅允許本地 Unix Socket 連線,提升安全性。

  3. 無密碼登入並修改密碼
    mysql -u root
    # 進入 mysql> 提示符後執行:
    USE mysql;
    -- MySQL 5.7.6+ 欄位名為 authentication_string
    UPDATE user SET authentication_string=PASSWORD('NewStrongPass2024!') WHERE User='root' AND Host='localhost';
    -- MySQL 5.7.6 前欄位名為 password
    -- UPDATE user SET password=PASSWORD('NewStrongPass2024!') WHERE User='root' AND Host='localhost';
    FLUSH PRIVILEGES;
    EXIT;
  4. 正常重啟驗證
    # 終止 --skip-grant-tables 進程
    pkill -f "mysqld_safe --skip-grant-tables"
    # 正常啟動
    systemctl start mysqld
    # 驗證新密碼
    mysql -u root -p'NewStrongPass2024!' -e "SELECT 'Login Success';"

Windows 平台操作步驟

  1. 以管理員身分開啟 CMD/PowerShell
  2. 停止服務:net stop mysql 或 sc stop mysql
  3. 切換至 bin 目錄啟動跳過授權模式:
    cd "C:\Program Files\MySQL\MySQL Server 5.7\bin"
    mysqld --skip-grant-tables --skip-networking
  4. 另開視窗無密碼登入:mysql -u root
  5. 執行相同 UPDATE/FLUSH PRIVILEGES 指令
  6. 關閉第一個視窗(Ctrl+C),正常啟動服務:net start mysql
  7. 驗證新密碼登入

關鍵坑點與避坑指南

坑點現象解決方案
SET PASSWORD 失敗ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement必須使用 UPDATE 直接修改 user 表,不可用 SET PASSWORD
plugin 欄位為 caching_sha2_password新密碼無法驗證同時更新 plugin='mysql_native_password' 或使用 ALTER USER (需重啟後)
多個 root 帳號 (localhost, 127.0.0.1, ::1, %)部分主機仍無法登入WHERE 條件包含所有 Host,或統一用 %(不建議生產環境)
Windows 服務名稱非預設net stop mysql 失敗用 sc query type= service state= all | findstr -i mysql 確認服務名
AppArmor/SELinux 阻擋 mysqld 讀寫 datadir跳過授權模式啟動失敗臨時設定 permissive 模式或調整策略

MySQL 8.0 新特性:ALTER USER 無需 FLUSH PRIVILEGES

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