MySQLやMariaDBを運用していると、ログファイルに次のようなテーブル破損のメッセージが記録される場合があります。
200603 11:36:12 [ERROR] /usr/libexec/mysqld: Table './dbname/tablename' is marked as crashed and should be repaired
WordPressのサイトではプラグインの更新のタイミングでテーブルの整合性がとれなくなりテーブルが破損するケースもあるようです。
このままではデータベースのデータが壊れる可能性がありますので、以下のような手順でテーブルを修復します。
破損テーブルの確認
破損したテーブルを確認するには mysqlコンソールで次のコマンドを実行します。
mysql> use dbname mysql> check table `tablename`; +------------------+-------+----------+-----------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +------------------+-------+----------+-----------------------------------------------------------+ | dbname.tablename | check | warning | Table is marked as crashed | | dbname.tablename | check | warning | 10 clients are using or haven't closed the table properly | | dbname.tablename | check | error | Record at pos: 613364 is not remove-marked | | dbname.tablename | check | error | record delete-link-chain corrupted | | dbname.tablename | check | error | Corrupt | +------------------+-------+----------+-----------------------------------------------------------+ 5 rows in set (0.00 sec)
破損したテーブルの修復と確認
テーブルの状況が確認できたら、以下のコマンドでテーブルを修復します。
mysql> repair table `tablename`; +------------------+--------+----------+----------------------------------------+ | Table | Op | Msg_type | Msg_text | +------------------+--------+----------+----------------------------------------+ | dbname.tablename | repair | warning | Number of rows changed from 499 to 500 | | dbname.tablename | repair | status | OK | +------------------+--------+----------+----------------------------------------+ 2 rows in set (0.03 sec)
テーブルの修復(リペア)が完了したら、もう一度テーブルの状態を確認します。
mysql> check table `tablename`; +------------------+-------+----------+----------+ | Table | Op | Msg_type | Msg_text | +------------------+-------+----------+----------+ | dbname.tablename | check | status | OK | +------------------+-------+----------+----------+ 1 row in set (0.00 sec)
破損したテーブルが修復されると、ステータスがOKになります。
これでMySQL/MariaDBで破損したテーブルを修復し、通常運用にもどります。