先日データベースサーバーのディスク容量が一杯になってしまい、動作が止まってしまった。
ログの削除で容量に空きができたものの、複数のテーブルで’Table ‘tablename’ is marked as crashed and should be repaired’ といったエラーが出てselectすらできない状況になってしまった。
広告
複数テーブルの修復ならREPAIRコマンドよりmysqlcheckがオススメ
最初該当テーブルを一つづつrepairコマンドで修復していました。
1 2 3 4 5 6 7 8 9 10 |
mysql> use databesename; mysql> repair table tablename; +------------+--------+----------+----------+ | Table | Op | Msg_type | Msg_text | +------------+--------+----------+----------+ | db.table | repair | status | OK | +------------+--------+----------+----------+ 1 row in set (5.99 sec) |
mysqlのコンソールから↑こんな感じの操作でうまくいけば治るのですが、今回は修復の必要があるテーブルが多すぎてやってられない。
何かないかと検索していたらありました!
mysqlcheckで一気に修復
mysqlcheckで一気に修復できることが判明
1 |
$ mysqlcheck -r dbname -u root -p |
上記コマンドでデータベースdbnameのテーブル全てを修復できます。
ついでにテーブルのチェックと最適化も行う
1 |
$ mysqlcheck --auto-repair -c -o dbname -u root -p |
-cはテーブルのチェックで、-oはテーブルの最適化です。
サーバーの異常停止やテーブルの確認を行いたい場合は上記コマンドでテーブルのチェック、最適化、修復ができるので、心配な時は実行してみるといいかもしれません。