サーバ負荷による強制終了で壊れたmysqlのテーブルを修復する(REPAIR TABLEとmyisamchk)

参考:サーバーを強制終了した時に MySQL が破損した際は REPAIR TABLE で修復する

参考:MySQL が盛大にクラッシュしたので myisamchk ユーティリティを使って修復する作業まとめ

会社で利用しているs3backup君がsqlのテーブルがクラッシュしててバックアップできないよーとエラーを吐き出していたので修正しました。modxを使ってるサイトだったんですがmodxのテーブルを修正しました。

こんな感じのエラーでした。 RuntimeError: error dumping the MySQL database hoge_db: mysqldump: Got error: 145: Table ‘./hoge_db/modx_event_log’ is marked as crashed and should be repaired when using LOCK TABLES

 

REPAIR TABLE での確認、修復

「REPAIR TABLE」というコマンドがあるらしい。あんまり壊れたことがなかったので初めて知った。 mysqlに接続して、コマンドをテーブル名に対して打ち込むようです。

$ mysql -d hoge_db -u root -p
mysql> REPAIR TABLE modx_event_log;

これで修正したよ!というログが表示されたら完了、Warningとか出なければOKだそうで。

 

myisamchk での確認、修復

MyISAM を使っているときだけですが、myisamchk というチェックコマンドがあるらしい

myisamchk ユーティリティはユーザのデータベース テーブルの情報を収集し、チェック、修復、もしくは最適化します。 myisamchk は MyISAM テーブルとともに作動します(データやインデックスを記憶するための .MYD や .MYI テーブル)。

$ find / -name "*modx_event_log*"
find: File system loop detected; `/var/named/chroot/var/named' is part of the same file system loop as `/var/named'.
/var/lib/mysql/hoge_db/modx_event_log.MYD
/var/lib/mysql/hoge_db/modx_event_log.frm
/var/lib/mysql/hoge_db/modx_event_log.MYI

$ myisamchk /var/lib/mysql/hoge_db/modx_event_log.MYI
Checking MyISAM file: /var/lib/mysql/hoge_db/modx_event_log.MYI
Data records:    2102   Deleted blocks:       0
- check file-size
- check record delete-chain
- check key delete-chain
- check index reference
- check data record references index: 1
- check data record references index: 2
- check record links

こんな感じでした。多分さっきのREPAIR TABLEでなおっちまったんだと思います。

以下は参考サイト引用。 書かれているように駄目なときはWarningが出るっぽい。

$ sudo myisamchk /var/lib/mysql/hoge/posts.MYI
Checking MyISAM file: /var/lib/mysql/hoge/posts.MYI
Data records:  111016   Deleted blocks:       0
myisamchk: warning: Table is marked as crashed and last repair failed
myisamchk: warning: 2 clients are using or haven't closed the table properly
- check file-size
myisamchk: warning: Size of datafile is: 13600153700       Should be: 13512913956
- check record delete-chain
- check key delete-chain
- check index reference
- check data record references index: 1
myisamchk: warning: Auto-increment value: 136262 is smaller than max used value: 136263
- check data record references index: 2
- check data record references index: 3
- check data record references index: 4

なんにせよ直ったっぽい。 とりあえずメモでした。

機械忍者

某SEO会社(?)勤務。 多分日本語よりHTMLの方が得意です。 最近はRubyとかいうキラキラな言語も勉強中です。 SEOはもう標準スキルになってきてると思うので正直もうあんまり昔ほどの熱意は感じません。 新たに躍動してる人も多いですしね。 だれか強化骨格コスプレあったら教えてください。