Sync A World You Want To Explore

関 信浩が2002年から書き続けるブログ。ソーシャルメディア黎明期の日本や米国の話題を、元・記者という視点と、スタートアップ企業の経営者というインサイダーの立場を駆使して、さまざまな切り口で執筆しています

今朝、いつものように、スパムコメントのチェックもかねて、何気なくMovable Typeのコメント画面を見ると、コメントが1個も表示されません。突然コメントが全部削除されるわけもないので、とりあえずデータベース(MySQL)のバックアップをとって、調べてみようと思ったところ、mysqldumpでエラーが…

mysqldump: Error 1030: Got error 127 from table handler when dumping table `mt_comment` at row: 4591

ということで、ゴールデンウィーク明けの月曜早朝から、MySQLと格闘することになりました。

さっそくmysqlに入って調べてみると、

mysql> select * from mt_comment;
ERROR 1030: Got error 127 from table handler

しょうがないので、MySQLのマニュアルを見たところ


とあります。

ということで、まずmt.cgiを動かしているApacheを落として、flush tablesを実行し、テーブルをチェックしてみました。

mysql> check table mt_comment quick;
+--------------------+-------+----------+--------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+--------------------+-------+----------+--------------------------------------------------------+
| xxxxxxx.mt_comment | check | warning | 4 clients is using or hasn't closed the table properly |
| xxxxxx.mt_comment | check | status | OK |
+--------------------+-------+----------+--------------------------------------------------------+

あやしいので、quickチェックからextendedに切り替えて再度。

mysql> check table mt_comment extended;
+--------------------+-------+----------+----------------------------------+
| Table | Op | Msg_type | Msg_text |
+--------------------+-------+----------+----------------------------------+
| xxxxxx.mt_comment | check | warning | Table is marked as crashed |
| xxxxxx.mt_comment | check | error | Found too long record at 2925500 |
| xxxxxx.mt_comment | check | error | Corrupt |
+--------------------+-------+----------+----------------------------------+

ということで、repairコマンドで、テーブルの修復を実行。

mysql> repair table mt_comment ;
+--------------------+--------+----------+-------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+--------------------+--------+----------+-------------------------------------------------------+
| xxxxxx.mt_comment | repair | info | Found block with too small length at 2925500; Skipped |
| xxxxxx.mt_comment | repair | info | Found block with too small length at 3445396; Skipped |
| xxxxxx.mt_comment | repair | info | Wrong bytesec: 45-101-109 at 4124404; Skipped |
| xxxxxx.mt_comment | repair | warning | Number of rows changed from 23143 to 23112 |
| xxxxxx.mt_comment | repair | status | OK |
+--------------------+--------+----------+-------------------------------------------------------+

としたところ、あっさりと直りました。

DBが壊れた原因は、ちょっと究明しているヒマがないので、とりあえず放置。あとでログなどを見て解析しようと思っています(が、ヒマがあるかは不明です)。