MySQL:innodb_log_file_size のサイズを変更する方法

MySQL をアップグレード(またはダウングレード)を行った際、my.cnf の「innodb_log_file_size」と実際の「ib_logfile0, ib_logfile1」のファイルサイズが異なると、MySQLがエラーとなり起動できなくなります。その場合の対処です。(2014/09/20作成)

Database ColossusCloud / Pixabay

「innodb_log_file_size」とは…

InnoDBの更新ログを記録するディスク上のファイルです。
大きくした方がパフォーマンスが向上します。なぜなら、innodb_log_fileがいっぱいになると、メモリ上のinnodb_buffer_poolの中の更新された部分のデータを、ディスク上のInnoDBのデータファイルに書き出すしくみになっているからです。ですので、innodb_buffer_pool_sizeを大きくしたら、innodb_log_file_sizeもあわせて調整しないとパフォーマンスが向上しません。(参考文献:DSAS)

0.環境情報

$ mysql --version
mysql  Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1

1.エラーログ

(抜粋)
140920  0:20:25  InnoDB: Initializing buffer pool, size = 256.0M
140920  0:20:25  InnoDB: Completed initialization of buffer pool
InnoDB: Error: log file ./ib_logfile0 is of different size 0 50331648 bytes
InnoDB: than specified in the .cnf file 0 268435456 bytes!
140920  0:20:25 [ERROR] Plugin 'InnoDB' init function returned error.
140920  0:20:25 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
…

2.設定変更

$ sudo /etc/init.d/mysqld stop
$ pwd
/var/lib/mysql
$ sudo mv ib_logfile0 __ib_logfile0
$ sudo mv ib_logfile1 __ib_logfile1
$ sudo vi /etc/my.cnf
innodb_log_file_size = 任意のサイズをMBで指定
$ sudo /etc/init.d/mysqld start

※logfile0, logfile1 をリネーム後 MySQL起動すると、ログファイルは自動的に再作成されます。

以上

About yoshimasa

埼玉県さいたま市在住、2男3女のパパです。Linux系の技術情報を中心にまとめています。1978年2月生まれ。