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

Linux 系統下 MySQL 密碼忘記?兩大經典恢復方法完整教學

     編輯:MySQL 資料庫相關知識

前言

MySQL 作為廣泛使用的開源關聯式資料庫,管理員偶爾會遇到 root 密碼遺失的情況。在 Linux 環境下,主要有兩種經典恢復思路:一是利用已知密碼的 user 表檔案直接覆蓋;二是透過 --skip-grant-tables 參數繞過權限驗證重設密碼。本文將詳細解析這兩種方法的操作步驟與注意事項。

方法一:複製已知密碼的 user 表檔案覆蓋

MySQL 的使用者帳號與密碼雜湊儲存在 mysql 資料庫的 user 表中。在 Linux 系統下,該表對應三個實體檔案,位於 /var/lib/mysql/mysql/ 目錄:

  • user.frm — 表結構定義檔
  • user.MYD — 表資料檔
  • user.MYI — 表索引檔

操作步驟

  1. 備份原有檔案:為防萬一,先將上述三個檔案重命名或移動備份。
  2. 取得已知密碼的 user 表三檔:從另一台已知 root 密碼的 MySQL 伺服器複製這三個檔案到當前目錄。
  3. 重啟 MySQL 服務:執行 service mysql restart 或 /etc/init.d/mysql restart。
  4. 驗證登入:使用已知密碼即可成功登入 MySQL。
提醒:此法前提是擁有另一套相同版本、已知密碼的 MySQL 實例,且表結構相容。

方法二:使用 --skip-grant-tables 繞過權限表重設密碼

若無可用的已知密碼實例,可採用官方文檔推薦的標準流程:

詳細步驟

  1. 正常關閉 MySQL 服務
    使用 killall -TERM mysqld(勿用 kill -9),需具備 root 權限。進程 PID 檔通常在資料目錄下(如 /var/lib/mysql/hostname.pid)。
  2. 以跳過權限表模式啟動
    Linux 下執行:/usr/bin/mysqld_safe --skip-grant-tables &
    Windows 下執行:mysqld --skip-grant-tables
  3. 無密碼登入並修改密碼
    此時密碼為空,直接執行 mysql -u root mysql 進入,然後:
    UPDATE user SET Password=PASSWORD('新密碼') WHERE User='root';
    FLUSH PRIVILEGES;
  4. 重新載入權限表
    執行 mysqladmin flush-privileges 或重啟服務使修改生效。
  5. 使用新密碼正常登入

總結與建議

方法一適用於擁有同版本已知密碼環境的快速恢復;方法二為通用標準做法,適用於所有版本。生產環境建議:

  • 定期備份 mysql 系統庫
  • 使用密碼管理工具記錄 root 密碼
  • 配置 skip-grant-tables 僅在維護窗口臨時啟用,修復後立即移除

MySQL 密碼恢復雖不複雜,但操作不當可能導致資料不一致或安全風險,建議在測試環境先行演練。

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