- blogs:
- cles::blog

MySQLのテーブルが壊れた

これまでも何かと問題を引き起こしてくれていたサーバからまたもや障害報告が来ました。
いつもどおり何かの弾みで何かのdaemonが落ちただけだと軽く考えていたのですが、そんなに簡単な問題ではありませんでした。
† とりあえずログインしてみる
サーバにログインしてプロセスを確認してみたのですが、どれも正常に稼動していて、サービスに必要なもので落ちているdaemonはありませんでした。念のため、サービスに必要なdaemonを全て再起動してみたのですが・・・・・サービスは回復せず。
ここで妙なことに気づきました。一律にデータが表示されていないわけではなく、データが表示されているページもあれば、表示がされていないところもあるというような状況です。
そこでmysqlのコンソールを立ち上げて、データが表示されていない部分のプログラムが使っているテーブルを片っ端からselectしてみることにしました。そうしたら、ひとつだけselectできないテーブルを見つけてしまいました。
このときに直感でDBファイルが壊れているとわかりました。
† myisamckをかけてみる
該当のテーブルはタイプがMyISAMだったので、本当にDBファイルが壊れているかどうかはmyisamckを使えばわかります。ということで、mysqlを終了*1してから、チェックをしてみました。
myisamck XXXXXXXX
Checking MyISAM file: XXXXXXXX
Data records: 6202 Deleted blocks: 5
myisamchk: warning: Table is marked as crashed
myisamchk: warning: 2 clients is using or hasn't closed the table properly
- check file-size
- check key delete-chain
- check record delete-chain
- check index reference
- check data record references index: 1
myisamchk: error: Can't read key from filepos: 65536
- check record links
myisamchk: error: Keypointers and record positions doesn't match
MyISAM-table 'XXXXXXXX' is corrupted
Fix it using switch "-r" or "-o"
予想通りテーブルが壊れていたので、マニュアルの「4.5.6.9 テーブルの修復方法」にしたがって修復をしてみました。インデックスの破損だけだったようなので、比較的すぐに作業は完了でした。
MySQLは4年くらい使っていますが、初めての経験でした*2。
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/486
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(112946)
3 . 年次の人間ドックへ(112372)
4 . 2023 年分の確定申告完了!(1つめ)(111941)
5 . 三菱鉛筆がラミーを買収(111815)