InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes

概要

mysql-develをインストールしたところ、依存関係に引きずられてMySQL本体のバージョンも上がってしまいました。エラーによってMySQLを起動できなくなったため、InnoDBログファイルを作り直すことで修正しました。



問題

mysql-develをインストールしたところ、依存関係に引きずられてMySQL本体のバージョンも上がってしまいました。yummysqlmysql-serverをアップデートする旨を表示していた筈ですが、表示内容をまじめに確認しなかったため、この時点ではMySQL本体がアップデートされたことに気付いていませんでした。

# yum install mysql-devel.x86_64 --enablerepo=remi

すると、バックエンドにMySQLを使っているZabbixがエラーを吐き始めました。MySQLの再起動を試みますが、既に停止中で、起動に失敗します。/var/log/mysql/mysqld.logを確認したところ、次のようなエラーが出力されていました。

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 16777216 bytes!
110418 21:31:32 [ERROR] Plugin 'InnoDB' init function returned error.
110418 21:31:32 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
110418 21:31:32 [ERROR] Unknown/unsupported storage engine: InnoDB
110418 21:31:32 [ERROR] Aborting

InnoDBログファイルのファイルサイズが、my.cnfで指定したもの(16777216 bytes)と実在するファイル(5242880 bytes)で異なっていることが原因のようです。おそらくMySQLがアップデートされたときに、InnoDBログファイルも上書きされたのでしょう。



解決方法

自動では作り直してはくれないので、InnoDBログファイル(ib_logfile0とib_logfile1)を/tmpに移動します。これらのファイルはアップデート時に上書きされたものなので、ログファイルとしての意味はない(復旧に使えない)のですが、念のため。

# mv /var/lib/mysql/ib_logfile0 /tmp
# mv /var/lib/mysql/ib_logfile1 /tmp

もう一度MySQLを起動すると、InnoDBログファイルを作り直して正常に起動できました。

# sudo /etc/rc.d/init.d/mysqld start
mysqld を起動中:                                           [  OK  ]

MySQLのバージョンは5.1から5.5に上がっていました。

# mysql --version
mysql  Ver 14.14 Distrib 5.5.11, for Linux (x86_64) using readline 5.1

InnoDB ログ ファイルの数やサイズを変更したければ、次の指示に従ってください。利用する手順は innodb_fast_shutdown の値によって決まります:

もし innodb_fast_shutdown が2に設定されなければ:MySQL サーバを停止し、エラー無しでシャットダウンした事を確認する必要があります。(ログ内に未処理のトランザクションの情報が無い事を保証する為)シャットダウンの際に何かが起きた場合、テーブルスペースを復旧する為に必要になるので、古いログ ファイルを安全な場所にコピーしておいてください。古いログ ファイルをログ ファイル ディレクトリから削除し、ログ ファイル設定を変更する為に my.cnf を編集し、MySQL サーバを再起動してください。mysqld はログ ファイルが存在しない事を確認し、新しいものを作成している事を告げます。

もし innodb_fast_shutdown が2に設定されると:サーバをシャットダウンし、innodb_fast_shutdown を1に設定し、サーバを再起動してください。サーバは復旧を許可されます。そして、サーバをもう一度シャットダウンし、InnoDB ログ ファイル サイズを変更する為に前出の項目で説明されている手順に従わなければいけません。innodb_fast_shutdown を2に設定し直し、サーバを再起動してください。

http://dev.mysql.com/doc/refman/5.1/ja/adding-and-removing.html