SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【MySQL】テーブル破損対応(mysqlcheck コマンド)

問題

MySQLが強制終了されてから様子がおかしいです。

どうやって状況の確認、修正の対応などするとよいでしょうか。

答え

MyISAMテーブルの場合は、mysqlcheck コマンドが使える。

mysqlcheck コマンドは、テーブルのチェック、分析、最適化、修復ができる。

MySQLサーバ稼働中でも実行できる。

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

チェックは、cオプションで。

特定のテーブルのみ

$ mysqlcheck -c データベース名 テーブル名 -u root -p
Enter password:
データベース名.テーブル名                        OK

特定のデータベースのみ

$ mysqlcheck -c データベース名 -u root -p
Enter password: 
データベース名.テーブル名1                        OK
データベース名.テーブル名2                        OK
データベース名.テーブル名3                        OK

データベース全体

$ mysqlcheck -c --all-databases -u root -p
Enter password: 
データベース名1.テーブル名1                        OK
データベース名1.テーブル名2                        OK
データベース名1.テーブル名3                        OK
データベース名2.テーブル名1                        OK
データベース名2.テーブル名2                        OK
データベース名2.テーブル名3                        OK

破損していなければOK、破損していると「Table ‘テーブル名’ is marked as crashed and should be repaired」のようなメッセージが表示される。

テーブルの分析

分析(Analyze)は、aオプションで。

$ mysqlcheck -a データベース名 テーブル名 -u root -p
Enter password: 
データベース名.テーブル名                          OK

テーブルの最適化

最適化(Optimize)は、oオプションで。

$ mysqlcheck -o データベース名 テーブル名 -u root -p
Enter password: 
データベース名.テーブル名
status   : OK   

テーブルの修復

修復(Repair)は、rオプションで。

$ mysqlcheck -r データベース名 テーブル名 -u root -p
$ mysqlcheck -r データベース名 -u root -p
$ mysqlcheck -r --all-databases -u root -p

チェックとともにエラーがあれば自動修復

エラーがあれば自動修復するオプションもある。

$ mysqlcheck --auto-repair -c -o testデータベース名 -u root -p

メモ

InnoDBにはrepairは使えない。

note     : The storage engine for the table doesn't support repair

関連するメモ

コメント