BLOGTIMES
2004/11/08

MySQLのテーブルが壊れた

  mysql 
このエントリーをはてなブックマークに追加

これまでも何かと問題を引き起こしてくれていたサーバからまたもや障害報告が来ました。

いつもどおり何かの弾みで何かのdaemonが落ちただけだと軽く考えていたのですが、そんなに簡単な問題ではありませんでした

MySQLクックブック〈VOLUME1〉
MySQLクックブック〈VOLUME2〉
実践ハイパフォーマンスMySQL
MySQL全機能リファレンス

とりあえずログインしてみる

サーバにログインしてプロセスを確認してみたのですが、どれも正常に稼動していて、サービスに必要なもので落ちている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

  • *1: myisamckはDBファイルを直接いじるのでmysqldを終了させておかないと使えない
  • *2: まぁ、あまり経験したくないんですが

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/486
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン