MySQL InnoDB表损坏 - 如何解决?

时间:2009-08-28 17:22:27

标签: mysql crash innodb

在我的一个InnoDB表中执行条件DELETE操作时,显然需要在ibdata1中创建一些临时表,硬盘已填满且mysql崩溃。在删除ibdata1文件(~30 GB)之前,我无法重新开始。

现在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再次用适当的数据识别这些表?

谢谢!

2 个答案:

答案 0 :(得分:3)

无保证,但您可能需要查看: https://launchpad.net/percona-data-recovery-tool-for-innodb

答案 1 :(得分:3)

即使使用表名称空间,ibdata1文件仍包含这些名称空间所依赖的数据,例如多版本索引号和事务日志。你不能只删除那个文件并期望它能够正常工作。

如果你非常幸运,你可以恢复/取消删除ibdata1文件并使用--innodb_force_recovery = 3选项启动mysql。这将允许mysql启动而不尝试回滚/前滚任何事务。

如果你还有问题,你需要从启动时发布你的mysql服务器日志。