首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL Root 密碼恢復兩大方案:資料目錄替換法與跳過授權表法完整操作指南

     編輯:MySQL 綜合教學

MySQL Root 密碼恢復雙方案:資料目錄替換 vs 官方跳過授權表

提供兩種互補的恢復路徑:適用於可停機、有原始碼包的「資料目錄替換法」,與適用於線上服務不可長時間停機的「官方 --skip-grant-tables 法」。

方案一:資料目錄替換法(冷備份思維)

適用場景

  • 可接受短暫停機
  • 手邊有 MySQL 原始碼分發包(或乾淨安裝實例)
  • 原 mysql 系統庫可能損壞/竄改

步驟

  1. 下載 MySQL 原始碼分發包(任意 OS,data/mysql 通用)
  2. 重命名現有系統庫目錄:mv data/mysql data/oldmysql
  3. 複製分發包 data/mysql 至 data/
  4. 重啟 MySQL,此時為空密碼 Root 登入
  5. 登入後自行調整授權:SET PASSWORD...
  6. 檢查 oldmysql 確認原授權狀態,必要時逐表遷移
  7. 若有完整備份,做完整性驗證防範竄改

優缺點

優點缺點
徹底重置系統庫,乾淨無殘留 原系統庫授權/使用者/權限全部遺失,需重建
無需修改啟動參數 需停機、需原始碼包

方案二:官方 --skip-grant-tables 法(熱修復思維)

標準流程

  1. 優雅停止:kill \`cat /mysql-data-dir/hostname.pid\` 或 killall -TERM mysqld
  2. 跳過授權啟動:mysqld_safe --skip-grant-tables & 或 /bin/safe_mysqld --skip-grant-tables &
  3. 登入重置(任一):
    • mysqladmin -h hostname -u root password 'newpass'
    • USE mysql; UPDATE user SET Password = PASSWORD('yourpass') WHERE User = 'root'; FLUSH PRIVILEGES;
  4. 載入權限:mysqladmin -h hostname flush-privileges 或 FLUSH PRIVILEGES;
  5. 正常重啟

關鍵指令對照

操作指令
停止killall -TERM mysqld
跳過授權啟動mysqld_safe --skip-grant-tables &
mysqladmin 修改密碼mysqladmin -u root flush-privileges password "newpassword"
SQL 修改密碼UPDATE user SET Password = PASSWORD('new_pass') WHERE User = 'root'; FLUSH PRIVILEGES;
載入權限mysqladmin flush-privileges / FLUSH PRIVILEGES;

方案選擇決策樹

是否可接受 5-10 分鐘停機?
  ├─ 是 → 有原始碼包/乾淨實例? → 是 → 方案一(最乾淨)
  │                                 └─ 否 → 方案二
  └─ 否(線上核心業務) → 方案二(不停主服務,僅短暫重啟 mysqld)

事後必做

  1. SELECT User, Host, Password FROM mysql.user; 確認雜湊已更新
  2. FLUSH PRIVILEGES; 確保生效
  3. 新密碼登入驗證
  4. 記錄操作日誌,納入審計追蹤

兩大方案互補,依業務可用性要求選擇,平時多演練,臨危不亂。

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