4

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

谢谢!

4

2 回答 2

3

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

于 2009-08-28T17:47:26.520 回答
3

即使您使用表命名空间,ibdata1 文件仍然包含这些命名空间所依赖的数据,例如多版本索引号和事务日志。您不能只删除该文件并期望它起作用。

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

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

于 2009-08-28T18:15:31.317 回答