ネットサービスとかGoogleとか豆知識とか。

Index > MySQL > MySQLがクラッシュして勝手に終了する原因はファイル破損らしい
MySQL
2011年05月29日 02:12

MySQLがクラッシュして勝手に終了する原因はファイル破損らしい

  • このエントリーをはてなブックマークに追加
  • ... PV
スポンサード リンク

DailyFeedで使用しているMySQLのテーブルのひとつが1,000万レコードを超え、実行するクエリが重くなってきていたので、なんとかしようとインデックスを新しく作成。クエリ自体は軽くなったのだけど、それ以来MySQLが自然とお亡くなりになるという事態に。。

MySQLのドキュメント「MySQL :: MySQL 4.1 リファレンスマニュアル :: A.4.1 MySQL が何度もクラッシュする場合に行うこと」によると、大抵はファイルの破損が原因とか。インデックスを作成するときにファイルが壊れたのかなと思いつつ、mysqlcheckを実行してみると問題のあるテーブルが大量に・・・

とりあえず mysqlcheck -c と mysqlcheck -r を繰り返す。ちなみにInnoDBを使っているとmysqlcheckの一部のオプションは使えない。

$ mysqlcheck -c -A -u root -p

... (省略) ...

$ mysqlcheck -r -A -u root -p

これでひと通り全データベースのテーブルのエラーは解消。しかしまだMySQLのクラッシュは解消しない。さらに mysqld.log を見てみると起動時に次のようなエラーが出ていた。

110528 12:35:56 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
110528 12:35:56 [Warning] '--default-character-set' is deprecated and will be removed in a future release. Please use '--character-set-server' instead.
/usr/libexec/mysqld: Table 'mysql.plugin' doesn't exist
110528 12:35:56 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
110528 12:35:57  InnoDB: Started; log sequence number 2 3224113078
110528 12:35:57 [ERROR] Can't open and lock privilege tables: Table 'mysql.servers' doesn't exist
110528 12:35:57 [ERROR] Column count of mysql.db is wrong. Expected 22, found 20. The table is probably corrupted
110528 12:35:57 [ERROR] mysql.user has no `Event_priv` column at position 29
110528 12:35:57 [ERROR] Cannot open mysql.event
110528 12:35:57 [ERROR] Event Scheduler: An error occurred when initializing system tables. Disabling the Event Scheduler.
110528 12:35:57 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.1.52-log'  socket: '/var/lib/mysql/mysql.sock'  port: 0  MySQL Community Server (GPL) by Utter Ramblings

なにやら怪しい感じだけどよく分からない。とりあえず[ERROR]の1行目に「mysql_upgradeを実行せよ」とあるので、指示通りに実行してみた。すると、

110528 12:44:04 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
110528 12:44:04 [Warning] '--default-character-set' is deprecated and will be removed in a future release. Please use '--character-set-server' instead.
110528 12:44:04  InnoDB: Started; log sequence number 2 3225204356
110528 12:44:05 [Note] Event Scheduler: Loaded 0 events
110528 12:44:05 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.1.52-log'  socket: '/var/lib/mysql/mysql.sock'  port: 0  MySQL Community Server (GPL) by Utter Ramblings

エラーが解消された。と同時にMySQLが自然とお亡くなりになる事象も発生しなくなった。ちなみにこのエラーは随分前から記録されていたけどMySQLがクラッシュすることはなかったので気づかなかった。