(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 — テーブル保守プログラム