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

Linux 下 MySQL Root 密碼恢復實戰筆記

     編輯:MySQL 資料庫相關知識

情境

Linux 新裝 MySQL,修改 root 密碼後一小時即忘記。靈感來自 Windows 同版本 MySQL 仍有預設密碼,嘗試複製 Windows 的 user 表檔案覆蓋 Linux 資料目錄。

操作步驟

  1. 定位 user 表三個檔案:
    Windows: c:\mysql\data\mysql\user.frm/.MYD/.MYI
    Linux: /var/lib/mysql/mysql/user.frm/.MYD/.MYI
  2. 為保險起見三個檔案全複製(若表結構未變,僅 .MYD 即可)。
  3. Linux 下停止 MySQL、覆蓋檔案、啟動 MySQL,使用 Windows 密碼登入成功。
  4. 登入後嘗試修改密碼報錯「user 唯讀」,發現檔案權限與擁有者異常(Windows 複製來的權限 666,擁有者 root)。
  5. 修正權限與擁有者:
    chown -R mysql:mysql user.*
    chmod 600 user.*
  6. 重啟 MySQL,再次修改密碼並 FLUSH PRIVILEGES 成功。
  7. 補充安全設定:刪除匿名用戶、遠端 root 登入權限。
    DELETE FROM user WHERE User='';
    DELETE FROM user WHERE Host='%';
    FLUSH PRIVILEGES;

通用標準方法(官方文檔)

  1. killall -TERM mysqld(非 kill -9)。
  2. mysqld_safe --skip-grant-tables &(Windows: mysqld --skip-grant-tables)。
  3. 無密碼登入:
    mysql mysql
    UPDATE user SET Password=PASSWORD('新密碼') WHERE User='root';
    FLUSH PRIVILEGES;
  4. mysqladmin flush-privileges 或 SQL FLUSH PRIVILEGES。
  5. 重啟服務,新密碼登入驗證。

其他非常規方法

  • 十六進制編輯器直接修改 user.MYD 加密密碼串(需已知密文,且結構複雜,不推薦)。
  • 若有其他已知密碼的 MySQL 實例,複製其 user 表檔案同樣可行,但需注意版本相容性與檔案權限。

經驗總結

  • 跨平台複製 user 表可行,但必須修正檔案擁有者與權限。
  • 標準 --skip-grant-tables 法最通用、最安全,建議優先採用。
  • 修改密碼後務必 FLUSH PRIVILEGES 並清理匿名/過寬權限帳號。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved