2009-06-22 62 views
5
Incorrect key file for table 'widgets'; try to repair it 

這是MySQL在嘗試將新索引應用於現有(非常大型)表時所給出的錯誤消息。當然,當我跟隨試圖修復該錯誤消息的建議:如何從MySQL(InnoDB)的「錯誤密鑰文件」中恢復?

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),複製了所有記錄(insert into select),更改了新表(InnoDB)上的引擎,重命名了損壞的表並重命名了新的表格,然後再次嘗試並得到相同的錯誤。

回答

10

看起來像一個老問題,但我只是碰到了這個問題。 MySQL正在向磁盤寫出臨時表,並且/ tmp分區已滿。

+0

tmp文件夾的限制通常爲2GB,請嘗試df -h以查看它 – 2012-01-18 12:14:19

0

我強烈建議在嘗試此操作前備份

執行虛擬

ALTER TABLE widgets; 
+0

謝謝。不幸的是,這並沒有奏效。 – 2009-06-22 16:20:16

0

當我們在做innodb時,需要觀察「tmpdir」。錯誤1034:關鍵修復肯定是因爲「tmpdir」已滿,你的修改會拋出這個錯誤。

所以我建議什麼時候Alter被觸發,讓你再次關注你的「tmpdir」利用率。如果tmp使用100%,那麼你肯定會看到這個錯誤:)。