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

MySQL 忘記 Root 密碼?三分鐘重置全平台通用方案

     編輯:MySQL 資料庫相關知識

MySQL 忘記 Root 密碼?三分鐘重置全平台通用方案

忘記 Root 密碼是常見緊急情況。本文提供 Windows/Linux 通用的標準重置流程,無需重裝、無需破解,三分鐘搞定。

核心原理

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

Windows 平台操作步驟

  1. 停止 MySQL 服務:
    
    net stop mysql
    
  2. 以跳過授權模式啟動:
    • 進入安裝目錄 bin 目錄(如 C:\Program Files\MySQL\MySQL Server 5.7\bin)
    • 管理員權限 CMD 執行:
      
      mysqld --skip-grant-tables --console
      

      視窗保持開啟,不要關閉。

  3. 另開 CMD 視窗,無密碼登入:
    
    mysql -u root
    
  4. 更新密碼:
    
    USE mysql;
    -- MySQL 5.7+ 欄位為 authentication_string
    UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='root';
    -- MySQL 5.6 欄位為 password
    -- UPDATE user SET password=PASSWORD('new_password') WHERE User='root';
    FLUSH PRIVILEGES;
    EXIT;
    
  5. 停止跳過授權進程,正常啟動:
    • 關閉執行 mysqld --skip-grant-tables 的 CMD 視窗(或 Ctrl+C)
    • 啟動服務:net start mysql
  6. 驗證新密碼:
    
    mysql -u root -p'new_password'
    

Linux 平台操作步驟

  1. 停止 MySQL:
    
    systemctl stop mysqld
    # 或
    service mysqld stop
    # 若無法停止,強制殺死
    killall -TERM mysqld
    
  2. 以跳過授權模式啟動:
    
    mysqld_safe --skip-grant-tables &
    # 部分版本為
    mysqld --skip-grant-tables --user=mysql &
    
  3. 無密碼登入:
    
    mysql -u root
    
  4. 更新密碼:
    
    USE mysql;
    UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='root';
    FLUSH PRIVILEGES;
    EXIT;
    
  5. 重啟 MySQL:
    
    # 先殺死 skip-grant-tables 進程
    killall -TERM mysqld
    # 正常啟動
    systemctl start mysqld
    
  6. 驗證:
    
    mysql -u root -p'new_password'
    

MySQL 8.0+ 特別注意

MySQL 8.0 密碼加密採用 caching_sha2_password,PASSWORD() 函數已移除。更新密碼請用:


ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
FLUSH PRIVILEGES;

或在 --skip-grant-tables 模式下:


UPDATE mysql.user SET authentication_string='' WHERE User='root';
FLUSH PRIVILEGES;
-- 正常重啟後再執行
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

常見問題排查

現象原因解決
無法啟動 --skip-grant-tables權限不足/目錄錯誤/已有進程佔用確認以 root/管理員執行、指定 --user=mysql、檢查 port 3306 佔用
登入報錯 Can't connect to local MySQL serverSocket 路徑不匹配指定 --socket=/var/lib/mysql/mysql.sock 或 -S /tmp/mysql.sock
UPDATE 後密碼不生效欄位名錯誤(5.7+ 用 authentication_string)查詢 DESC mysql.user 確認欄位名
重啟後仍無法登入未正確殺死 skip-grant-tables 進程ps aux | grep mysqld 確認僅有一個正常進程

安全建議

  • 重置後立即建立專用應用帳號,禁用或修改 root 遠程登入
  • 使用密碼管理器儲存密碼,避免再次遺忘
  • 定期輪換密碼,啟用密碼過期策略
  • 生產環境啟用 SSL 強制加密連線
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved