(MySQL) テーブルが壊れたかなと思ったら、mysqlcheck コマンドを実行しよう
mysqlcheck コマンドは、テーブルのチェック、分析、最適化、修復を行うことができます。
MySQLサーバ稼働中でも実行できるので、カジュアルにテーブルチェックなどができます。
1. テーブルのエラーチェック
c オプションでエラーチェックができます。
test データベースのtest_table テーブルをチェックする場合は、以下のように実行します。
$ mysqlcheck -c test test_table -u root -p Enter password: test.test_table OK
test データベースの全テーブルをチェックする場合。
$ mysqlcheck -c test -u root -p
全データベースのテーブルをチェックする場合。
$ mysqlcheck -c -u root -p --all-databases
2. テーブルの分析(Analyze)
a オプションを使います。
test データベースのtest_table テーブルを分析する場合は、以下のように実行します。
$ mysqlcheck -a test test_table -u root -p Enter password: test.test_table OK
エラーチェック同様、test データベースの全テーブルを分析することもできます。
$ mysqlcheck -a test -u root -p
3. テーブルの最適化(Optimize)
o オプションを使います。
test データベースのtest_table テーブルを最適化する場合は、以下のように実行します。
$ mysqlcheck -o test test_table -u root -p Enter password: test.test_table status : OK
test データベースの全テーブルを最適化することもできます。
$ mysqlcheck -o test -u root -p
4. テーブルの修復(Repair)
r オプションを使います。
test データベースのtest_table テーブルを修復する場合は、以下のように実行します。
$ mysqlcheck -r test test_table -u root -p
test データベースの全テーブルを修復することもできます。
$ mysqlcheck -r test -u root -p
エラーチェックや最適化と組み合わせて使用する場合は、--auto-repair オプションを使います。
$ mysqlcheck --auto-repair -c -o test -u root -p
デバッグ情報を表示する場合は、--debug-info オプションを使います。
$ mysqlcheck --debug-info --auto-repair -c -o test -u root -p Enter password: test.test_table status : OK (中略) User time 0.00, System time 0.00 Maximum resident set size 6040, Integral resident set size 0 Non-physical pagefaults 523, Physical pagefaults 0, Swaps 0 Blocks in 0 out 0, Messages in 0 out 0, Signals 0 Voluntary context switches 6, Involuntary context switches 18
ストレージエンジンによっては、使用できないオプションもあります。
例えば、InnoDB では r オプションは使用できません。
ストレージエンジンがサポートしていないオプションを使用すると、以下のようなメッセージが出力されます。
note : The storage engine for the table doesn't support repair
MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.5.3 mysqlcheck — テーブル保守プログラム