MySQL 作為廣泛使用的開源關聯式資料庫,管理員偶爾會遇到 root 密碼遺失的情況。在 Linux 環境下,主要有兩種經典恢復思路:一是利用已知密碼的 user 表檔案直接覆蓋;二是透過 --skip-grant-tables 參數繞過權限驗證重設密碼。本文將詳細解析這兩種方法的操作步驟與注意事項。
MySQL 的使用者帳號與密碼雜湊儲存在 mysql 資料庫的 user 表中。在 Linux 系統下,該表對應三個實體檔案,位於 /var/lib/mysql/mysql/ 目錄:
user.frm — 表結構定義檔user.MYD — 表資料檔user.MYI — 表索引檔service mysql restart 或 /etc/init.d/mysql restart。--skip-grant-tables 繞過權限表重設密碼若無可用的已知密碼實例,可採用官方文檔推薦的標準流程:
killall -TERM mysqld(勿用 kill -9),需具備 root 權限。進程 PID 檔通常在資料目錄下(如 /var/lib/mysql/hostname.pid)。/usr/bin/mysqld_safe --skip-grant-tables &mysqld --skip-grant-tablesmysql -u root mysql 進入,然後:UPDATE user SET Password=PASSWORD('新密碼') WHERE User='root';
FLUSH PRIVILEGES;mysqladmin flush-privileges 或重啟服務使修改生效。方法一適用於擁有同版本已知密碼環境的快速恢復;方法二為通用標準做法,適用於所有版本。生產環境建議:
mysql 系統庫skip-grant-tables 僅在維護窗口臨時啟用,修復後立即移除MySQL 密碼恢復雖不複雜,但操作不當可能導致資料不一致或安全風險,建議在測試環境先行演練。