2009-08-28 101 views
4

在我的一個InnoDB表中執行條件DELETE操作時,顯然需要在ibdata1中創建一些臨時表,硬盤已滿並且mysql崩潰。直到我刪除了ibdata1文件(〜30 GB)後,我纔開始重新啓動它。MySQL InnoDB表損壞 - 如何解決?

現在mysql的再次啓動,但在數據庫中的所有表似乎已損壞(當我做了REPAIR TABLE tablename EXTENDED我得到:

+-----------------------------------+--------+----------+---------+ 
| Table  | Op  | Msg_type | Msg_text      | 
+-----------------------------------+--------+----------+---------+ 
| mydb.table1 | repair | Error | Unknown table engine 'InnoDB' | 
| mydb.table1 | repair | error | Corrupt      | 
+-----------------------------------+--------+----------+---------+ 

我用innodb_file_per_table選項,讓我所有的.FRM和。 ibd文件(應該分別包含元數據和數據)都是完整的(具有與崩潰前相同的文件大小),在目錄中:/var/mysql/data/mydb/。有誰知道我如何讓mysql用適當的方法識別這些表數據再次出現?

謝謝!

+0

你是否在腐敗之前做了完整備份? – northpole 2009-08-28 17:24:39

+0

我只對錶結構做了備份(使用--no-data),因爲其餘數據非常龐大,大約100GB,可以通過其他腳本重新填充。但我仍然有這些帶有相應.frm文件的多GB .ibd文件,所以我認爲數據仍然存在。只是不確定如何讓MySQL再次閱讀它。 – ash 2009-08-28 17:27:26

回答

3

不能保證,但你可能想看看:https://launchpad.net/percona-data-recovery-tool-for-innodb

+0

不得已而爲之,您可以直接從MySQL原始文件中檢索數據(僅限實驗用戶;-) 請查看:http://www.ekito.fr/portail/repairing-a-badly-hurt- mysql-database?lang = en – 2012-02-09 14:36:00

3

即使您使用表的命名空間,在ibdata1中的文件仍然包含這些命名空間依賴,如多版本索引號和事務日誌數據。你不能只是刪除該文件,並期望它的工作。

如果您非常幸運,您可以恢復/取消刪除ibdata1文件並使用--innodb_force_recovery = 3選項啓動mysql。這將允許mysql啓動而不嘗試回滾/前滾任何事務。

如果你仍然具有eproblems,你需要從啓動後發佈你的mysql服務器日誌。

+0

感謝您的幫助。 – ash 2009-09-02 03:27:31