【发布时间】:2010-11-23 19:36:33
【问题描述】:
在我的一个 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 再次用适当的数据识别这些表?
谢谢!
【问题讨论】:
-
您在损坏之前是否进行了完整备份?
-
我只对表结构进行了备份(使用 --no-data),因为其余数据非常庞大,大约 100GB,并且可以通过另一个脚本重新填充。但我仍然有这些多 GB .ibd 文件和各自的 .frm 文件,所以我认为数据仍然存在。只是不确定如何让 MySQL 再次读取它。