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

MySQL 單表 IBD 檔案恢復實戰:Percona 工具深度應用

     編輯:MySQL 資料庫相關知識

InnoDB 採用獨立表空間(file_per_table=ON)時,每張表對應一個 .ibd 檔案。針對單表資料誤刪或誤 DROP,可透過物理備份與 Percona Data Recovery Tool 精準恢復,避免全庫恢復的漫長停機時間。

前置工具

Percona Data Recovery Tool:官方專案頁

情境一:誤刪部分資料,需用近期備份覆蓋(最簡單)

前提:備份後表未重建,space_id 與 index_id 與現有 ibdata1 完全一致。

操作步驟

  1. 物理備份:innobackupex --defaults-file=... /backup/
  2. Apply Log:innobackupex --apply-log ... /backup/2012-10-17_11-29-20/
  3. 備份當前 ibd(可選):cp testibd.ibd testibd.bak
  4. 捨棄表空間:ALTER TABLE testibd DISCARD TABLESPACE
  5. 複製備份 ibd 至資料目錄並修正擁有者
  6. 匯入表空間:ALTER TABLE testibd IMPORT TABLESPACE

情境二:誤 DROP 整張表,結構已不存在(較複雜)

核心難點:表被刪除後,ibdata1 中的 space_id 釋放,需手動修復系統表中的元數據映射。

關鍵步驟

  1. 重建相同結構的表
  2. 停止 MySQL 服務
  3. 對備份目錄執行 Apply Log
  4. 複製備份 ibd 至資料目錄
  5. 使用 ibdconnect 修改 ibdata1 中 SYS_TABLES 與 SYS_INDEXES 的 SPACE ID 映射
  6. 使用 innochecksum 重新計算 ibdata1 頁面校驗和(重複執行直到無輸出)
  7. 啟動 MySQL 服務驗證

關鍵提醒

  • 操作 ibdata1 前務必完整備份
  • innochecksum 需反覆執行直至所有頁面校驗通過
  • 生產環境建議先在測試環境演練全流程
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved