MySQLを動かしたままHDのdumpバックアップを取ったらISAMデータベースが壊れた

いつもハードディスクのバックアップを取る際にMySQLは止めた状態でやっていたのですが今回は横着してデータベースを起動させたままスナップショットdumpをしてディスクのコピーを取ってコピー先のディスクを起動させたところ以下のエラーが出るようになった。 answer_isamテーブルがクラッシュしましたよって言ってますね・・・ 因みにテーブル名から分かるようにこのテールはMyISAMテーブルで作成してあります。

DBIx::Class::ResultSet::next(): DBI Exception: DBD::mysql::st execute failed: Table 'answer_isam' is marked as crashed and should be repaired [for Statement "SELECT me.answer_id, me.

テーブルのエラーチェック

MySQLには check table コマンドがあり MyISAMテーブルとInnoDBテーブルに対してエラーチェックを行うコマンドです。 クラッシュしたテーブル answer_isam テーブルをチェックしてみた所やはりエラーと言われました。

mysql> check table answer_isam;                                                                                                                                                     
+---------------------+-------+----------+-----------------------------------------------------------+
| Table               | Op    | Msg_type | Msg_text                                                  |
+---------------------+-------+----------+-----------------------------------------------------------+
| omakase.answer_isam | check | warning  | Table is marked as crashed                                |
| omakase.answer_isam | check | error    | Size of datafile is: 20414672         Should be: 20415580 |
| omakase.answer_isam | check | error    | Corrupt                                                   |
+---------------------+-------+----------+-----------------------------------------------------------+
3 rows in set (0.00 sec)

破損したテーブルの修復

MySQLには破損された可能性があるテーブルを修復するコマンド repair table があります。 repairはCSVテーブル、MyISAMテーブル、ARCHIVEテーブルに対して実行できます。 今回問題となったテーブルはMyISAMテーブルなのでrepairコマンドで修復してみます。

mysql> repair table omakase.answer_isam;
+---------------------+--------+----------+--------------------------------------------------------------------+
| Table               | Op     | Msg_type | Msg_text                                                           |
+---------------------+--------+----------+--------------------------------------------------------------------+
| omakase.answer_isam | repair | info     | Found link that points at 20414672 (outside data file) at 20277440 |
| omakase.answer_isam | repair | warning  | Number of rows changed from 581577 to 581539                       |
| omakase.answer_isam | repair | status   | OK                                                                 |
+---------------------+--------+----------+--------------------------------------------------------------------+
3 rows in set (2.20 sec)

修復後の確認

修復完了後再度 check table コマンドで確認するとテーブルが修復されているのが分かります。

mysql> check table answer_isam;
+---------------------+-------+----------+----------+
| Table               | Op    | Msg_type | Msg_text |
+---------------------+-------+----------+----------+
| omakase.answer_isam | check | status   | OK       |
+---------------------+-------+----------+----------+
created:

Back to top