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

MySQL 密碼恢復實戰三法:拷貝 user 表、跳過授權表、十六進制編輯 user.MYD

     編輯:MySQL 資料庫相關知識

背景

Linux 下安裝 MySQL,修改 root 密碼後 1 小時忘記。記錄三種恢復實戰過程。

方法一:跨系統拷貝 user 表文件(需備份環境)

  1. 從已知密碼的 MySQL 實例(如 Windows 2003)拷貝三個文件:
    • user.frm(結構)
    • user.MYD(數據)
    • user.MYI(索引)
  2. 覆蓋目標實例 /var/lib/mysql/mysql/ 下同名文件
  3. 重啟 MySQL,用已知密碼登錄
  4. 關鍵修復:文件屬主/權限修正
    
    chown -R mysql:mysql /var/lib/mysql/mysql/user.*
    chmod 600 /var/lib/mysql/mysql/user.*
    
  5. 登錄後修改密碼並清理匿名賬號
    
    USE mysql;
    UPDATE user SET Password=PASSWORD('newpass') WHERE User='root';
    DELETE FROM user WHERE User='';
    DELETE FROM user WHERE Host='%';
    FLUSH PRIVILEGES;
    

局限:需擁有同版本/兼容結構的備份 user 表文件。

方法二:官方標準 --skip-grant-tables(最通用)


# 1. 正常停止
killall -TERM mysqld

# 2. 跳過授權表啟動
# Linux: /usr/bin/mysqld_safe --skip-grant-tables &
# Windows: mysqld --skip-grant-tables

# 3. 無密碼登錄修改
mysql -u root
mysql> USE mysql;
mysql> UPDATE user SET Password=PASSWORD('newpass') WHERE User='root';
mysql> FLUSH PRIVILEGES;

# 4. 正常重啟
killall -TERM mysqld
systemctl start mysqld

優勢:無需額外文件,所有版本通用,官方文檔推薦。

方法三:十六進制編輯 user.MYD(極客應急)

  • 用十六進制編輯器直接修改 user.MYD 中加密密碼串
  • 陷阱:密碼串存儲可能非連續(末兩字節分離存放),結構不穩定
  • 前提:仍需已知密碼的密文作為參考
  • 優勢:直接修改數據文件,無需修正文件屬主權限

不推薦常規使用,僅作極端環境下最後手段了解存儲結構。

總結建議

  1. 首選 方法二 (--skip-grant-tables),標準、安全、無依賴。
  2. 方法一適用於有同版本備份實例的遷移/克隆場景。
  3. 方法三僅供應急參考,生產環境嚴禁。
  4. 恢復後必須清理匿名賬號、限制 root 遠程登錄、設置強密碼策略。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved