先日、MySQLを操作していたら、下記のようなエラーに遭遇しました。
mysql> select * from テーブル名; ERROR 144 (HY000): Table './データベース/テーブル名' is marked as crashed and last (automatic?) repair failed
上記エラーは、テーブルが破損していることを示しています。
エラー確認としては、check tableコマンドを利用します。
mysql> check table テーブル名 quick; +------------------+-------+----------+----------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +------------------+-------+----------+----------------------------------------------------------+ | DB.テーブル名 | check | warning | Table is marked as crashed and last repair failed | | DB.テーブル名 | check | warning | 1 client is using or hasn't closed the table properly | | DB.テーブル名 | check | error | Size of datafile is: 268414976 Should be: 268871480 | | DB.テーブル名 | check | error | Corrupt | +------------------+-------+----------+----------------------------------------------------------+ 4 rows in set (0.00 sec)
上記を確認するとerror表示があるので、破損が確認できます。
破損テーブルを修復するには、repair tableコマンドを利用します。
mysql> repair table テーブル名; +---------------+--------+----------+--------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +---------------+--------+----------+--------------------------------------------------------+ | DB.テーブル名 | repair | info | Found block that points outside data file at 268414940 | | DB.テーブル名 | repair | warning | Number of rows changed from 4377692 to 4370359 | | DB.テーブル名 | repair | status | OK | +---------------+--------+----------+--------------------------------------------------------+ 3 rows in set (2 min 6.69 sec)
再度check tableコマンドで確認します。
mysql> check table テーブル名 quick; +---------------+-------+----------+----------+ | Table | Op | Msg_type | Msg_text | +---------------+-------+----------+----------+ | DB.テーブル名 | check | status | OK | +---------------+-------+----------+----------+
テーブルが破損してしまい困っている方は、一度試してみてください。