6
Incorrect key file for table 'widgets'; try to repair it 

这是 MySQL 在尝试将新索引应用于现有(非常大)表时给我的错误消息。当然,当我按照错误消息的建议尝试修复它时:

mysql> repair table widgets;
+-------------------+--------+----------+---------------------------------------------------------+
| Table             | Op     | Msg_type | Msg_text                                                |
+-------------------+--------+----------+---------------------------------------------------------+
| tedsdb.widgets    | repair | note     | The storage engine for the table doesn't support repair | 
+-------------------+--------+----------+---------------------------------------------------------+
1 row in set (0.00 sec)

我在这里最好的做法是什么(在修补之前明显的完整备份之后)?

更新:我创建了一个相同模式的新表(MyISAM),复制了所有记录(插入到选择中),更改了新表(InnoDB)上的引擎,重命名了损坏的表并重命名了新表,然后尝试再次得到同样的错误。

4

3 回答 3

13

看起来像一个老问题,但我刚刚遇到了这个问题。MySQL 正在将一个临时表写入磁盘并且 /tmp 分区已填满。

于 2010-09-14T17:37:24.790 回答
0

我强烈建议在尝试之前备份

执行一个假人

ALTER TABLE widgets;
于 2009-06-22T13:17:08.070 回答
0

当我们在 innodb 上做 Alter 时,需要观察“tmpdir”。Error 1034 : Key repair 肯定是因为"tmpdir" full,你的alter会抛出这个错误。

因此,我建议在触发 Alter 时多关注您的“tmpdir”利用率。如果 tmp 正在使用 100%,那么您肯定会看到此错误 :)。

于 2016-01-28T20:20:47.940 回答