MySQL資料復原(innoDB)-遺失.frm檔案但完整的ibdata

MySQL資料復原(innoDB)-遺失.frm檔案但完整的ibdata

最近的伺服器故障給我留下了一個看起來完整的 ibdata 文件,但只有一半的 .frm 包含目錄。我已將所有這些複製到新的 mysql 安裝中,並成功恢復了我仍然擁有 .frm 檔案的資料庫。我的問題是 - 是否可以以某種方式從 ibdata 檔案重新產生 .frm 檔案?或以某種方式修改同一資料庫的開發版本中的 .frm 文件,以便它們可用於復原?

遺憾的是,從備份還原並不是可行的選擇。

編輯以澄清:我嘗試使用本地生成的包含相同架構的 .frm 文件來恢復資料庫 - 沒有骰子,即使在 innodb_force_recovery = 1 時也是如此。

答案1

我從來沒有真正這樣做過,但你的問題與我使用的工具有關,所以我很好奇!看起來這實際上是可能的,這是一個例子:

http://www.chriscalender.com/?p=28

有時,當您只有 .ibd 檔案時,您可能需要恢復表。在這種情況下,如果您嘗試將其載入到新實例中,您可能會遇到一些有關表 ID 不符的錯誤。確實沒有辦法解決這個問題。

不過,我找到了兩種解決方法:

注意:對於要使用這些方法恢復的每個表,您將需要 .ibd 檔案和 CREATE TABLE 語句。

  • 模擬內部 InnoDB 表計數器。也就是說,建立工作表(啟用 innodb_file_per_table),直到表 id 的內部指標等於(1 – id_of_ibd_table_you_need_to_restore)。 (參見方法#1)
  • 手動十六進位編輯 .ibd 文件,更改表 ID。 (參見方法#2)

這些步驟本身有幾頁長,所以我沒有將它們貼到這裡。

另一篇相關貼文:http://www.mysqlperformanceblog.com/2011/05/13/connecting-orphaned-ibd-files/

我很想知道這是否有效,看起來很多人已經成功使用了它。

相關內容