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

MySQL Root 密碼丟失緊急重置指南:Windows 與 Linux 雙平台方案

     編輯:MySQL 資料庫相關知識

核心原理

通過 --skip-grant-tables 參數啟動 MySQL 實例,跳過權限表驗證,以無密碼 root 身份進入控制台,直接更新 mysql.user 表中的密碼哈希值,最後正常重啟服務生效。

一、Windows 平台操作步驟

  1. 以管理員身份登錄系統
  2. 停止 MySQL 服務:services.msc → MySQL → 停止,或 CMD net stop MySQL
  3. 進入安裝目錄 bin 目錄(例:C:\MySQL\bin)
  4. 跳過權限啟動:
    mysqld --skip-grant-tables

    或編輯 my.ini 在 [mysqld] 區段添加 skip-grant-tables,再啟動服務。

  5. 新開 CMD 窗口,同目錄下執行:
    mysqladmin -u root flush-privileges password "NewStrongP@ss!"
    mysqladmin -u root -p shutdown

    第二條命令會提示輸入新密碼,輸入上一條設置的密碼以關閉實例。

  6. 移除 my.ini 中的 skip-grant-tables(如已添加),正常啟動 MySQL 服務
  7. 驗證新密碼:mysql -u root -p

二、Linux/Unix 平台操作步驟

  1. 終止現有進程:killall mysqld 或 systemctl stop mysqld
  2. 跳過權限啟動(後台運行):
    mysqld_safe --skip-grant-tables &
  3. 無密碼登錄:mysql -u root
  4. 更新密碼(注意版本差異):
    -- MySQL 5.7.6+ / 8.0
    UPDATE mysql.user SET authentication_string=PASSWORD('NewStrongP@ss!') WHERE User='root' AND Host='localhost';
    -- MySQL 5.7.5 及之前
    UPDATE mysql.user SET Password=PASSWORD('NewStrongP@ss!') WHERE User='root' AND Host='localhost';
    FLUSH PRIVILEGES;
    EXIT;
  5. 關閉實例並正常重啟:
    mysqladmin -u root -p shutdown
    systemctl start mysqld
  6. 驗證:mysql -u root -p

三、關鍵注意事項

項目說明
密碼哈希必須使用 PASSWORD() 函數生成,絕不可寫入明文,否則導致「Host not allowed」等認證邏輯錯誤
安全窗口--skip-grant-tables 期間任何本地用戶均可無密碼 root 訪問,操作務必在內網隔離、最短時間內完成
僅限本地此模式不影響網絡連接權限邏輯,遠程連接仍受權限表約束
服務無法停止嘗試 mysqladmin -u root shutdown 或 kill -9 強制終止
MySQL 8.0 新特性採用 caching_sha2_password 默認認證插件,重置密碼後客戶端驅動需 8.0+ 版本支持

四、預防與最佳實踐

  1. 使用密碼管理器(KeePass、Bitwarden、1Password)存儲 root 密碼,禁止明文記錄。
  2. 生產環境禁用 root 遠程登錄,建立專用運維賬號並限制來源 IP。
  3. 定期演練密碼重置流程,納入應急預案文檔。
  4. MySQL 5.7+ 推薦使用 ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass'; 修改密碼,避免直接操作系統表。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved