Mysql

從 .ibd、.frm 和 mysqllogbin 文件恢復 MySQL 表

  • May 23, 2021

出於某種原因,當我嘗試打開儲存在.frm.ibd文件中的表(無論是在 MySQL 還是在 phpmyadmin 上)時,它會給我一個語法錯誤,或者它說它不存在。

我已經從 .frm 和 .ibd 文件中讀取了恢復表?有類似的問題,但我不知道如何檢查是否innodb_file_per_table啟用,我總體上真的很困惑。我還將我的mysql-bin.000002文件副本轉換為 txt 文件,因此我看到數據庫中的數據並沒有完全失去。

該數據庫是去年創建的。我有 6 個這樣的mysql-bin.00000文件,但由於某種原因,這.000002是最大的。現在,我擁有所有數據庫的.ibd.frm文件,但我不知道如何將它恢復到 MySQL 中,或者至少恢復到我可以閱讀的內容中。

我在 Windows 2003 Server 上使用 WampServer 2.4 和 MySQL 5.6.12。另外,我應該在 InnoDB 中下載外掛嗎?

通過大量的反複試驗,我終於弄清楚並解決了我的問題。對於那些沒有原始 ibdata1 文件,而只有 .frm 和 .ibd 文件的人,這是我恢復數據的方法。

  1. 在 -> http://dev.mysql.com/downloads/utilities下載並安裝 MySQL 實用程序。
  2. 進入您的命令/終端以打開 MySQL 實用程序 mysqlfrm,並使用它來查找您需要恢復的表的結構。我是怎麼做到的,我是 cd’ed 到 mysqlfrm 的文件位置,然後輸入“mysqlfrm –server=user:pwd@localhost –port=3307 “path_to_.frm_file” > table_name.txt"。.txt 文件應保存在與保存實用程序的文件夾相同的文件夾中,如果您沒有指定您想要的位置。
  3. 在文本文件中,您將看到 CREATE TABLE 語句,其中包括表的所有列和資訊(基本上是原始結構)。複製包含所有資訊的 CREATE 語句。
  4. 在您的 MySQL 命令中,創建一個新數據庫 (CREATE DATABASE database_name)。使其與原始數據庫名稱相同。
  5. 在新數據庫中創建一個新表——它不必與文件夾同名。您可以在命令提示符內創建新表,但我在 PhpMyAdmin 中創建了我的表,PhpMyAdmin 是一個免費的軟體工具,可通過 Web 處理 MySQL 的管理。我只需點擊 PhpMyAdmin 上的數據庫,然後點擊 SQL 表,然後粘貼 #3 中的表結構。(附帶說明一下,如果我在命令提示符中將表命名為“table”,我總是會收到錯誤消息,因此請盡量避免使用該名稱)。
  6. 在您的 MySQL 命令中,進入您的數據庫,然後輸入“ALTER TABLE table_name DISCARD TABLESPACE”,這實際上將刪除該表的 .ibd 文件。
  7. 將原始表(要恢復的表)的 .ibd 文件複製到新創建的表中,以替換剛剛刪除的 .ibd 文件。將您的初始 .ibd 文件更改為新創建的表的名稱。這將模仿您剛剛刪除的舊 .ibd 文件。您可以在電腦上新創建的數據庫文件夾下的 MySQL 數據文件夾中找到此文件夾。
  8. 返回您的 MySQL 命令,進入您的數據庫,然後輸入“ALTER TABLE table_Name IMPORT TABLESPACE”。你會收到一個“警告”(1)錯誤類型的聲明,但忽略它。
  9. 並做了!如果您嘗試訪問新表,它應該包含舊表中的所有數據。

我希望這會有所幫助,如果您有任何問題或意見,請告訴我!此外,請查看http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file了解其他詳細資訊。

引用自:https://dba.stackexchange.com/questions/71596