innodb_log_file_sizeの設定を変更しようとして、MySQLが起動しないエラーに遭遇してしまって、あれ?となったんですが、原因がそういうえばそうだった。というとこだったりしたので、書いておきます。
「innodb_buffer_pool_size」とセットな感じの「innodb_log_file_size」の設定
まず、MySQLのinnodb_buffer_pool_sizeは、ディスクイメージをメモリ上にバッファさせる値をきめる設定値で、この設定が、いかにディスクIOを押さえるかに繋がったりするので、コストパフォーマンス向上を考えるうえで重要な設定のひとつだったりします。
そして、この設定を変更するときに合わせて調整したいのが、innodb_log_file_sizeです。
innodb_log_file_size
大きくした方がパフォーマンスが向上します。
なぜなら、innodb_log_fileがいっぱいになると、メモリ上のinnodb_buffer_poolの中の更新された部分のデータを、ディスク上のInnoDBのデータファイルに書き出すしくみになっているからです。
ですので、innodb_buffer_pool_sizeを大きくしたら、innodb_log_file_sizeもあわせて調整しないとパフォーマンスが向上しません。
「innodb_buffer_pool_size」「innodb_log_file_size」の変更設定
innodb_log_file_sizeの設定を変更するときに注意しなければいけないのが、既にトランザクションログファイルが存在していて、innodb_log_file_sizeの設定の値の方が大きい場合、エラーとなってしまうというとこがあります。
これを踏まえて、設定作業を行うには、以下のように行います.
値を設定します。
# vi /etc/my.cnf innodb_buffer_pool_size = 512M innodb_log_file_size=128M
設定の値についても以下のページが参考になります。
innodb_buffer_pool_size
グローバルバッファなので、どかんと割り当ててください。
MySQL ABのドキュメントには、搭載メモリの80%とも書かれています。
innodb_log_file_sizeの値は、1MB以上で、32bitマシンの場合は4GB以下にしなければならないとMySQL ABのドキュメントには書いてあります。
また、もうひとつ上限があります。innodb_log_fileはinnodb_log_files_in_groupの数(デフォルトは2)だけつくられるのですが、innodb_log_file_size×innodb_log_files_in_groupが innodb_buffer_pool_sizeを越えてもいけません。
MySQLを停止します。
ここで、より厳密さを求めるならシャットダウンの前に
mysql> SET GLOBAL innodb_fast_shutdown=0;
を実行します。
# /etc/init.d/mysqld stop
トランザクションログファイルを削除します。(場合によっては移動で)
デフォルトでは、2つのログファイルを使用するようになっています。
rm /var/lib/mysql/ib_logfile0 rm /var/lib/mysql/ib_logfile1
MySQLを起動します。
# /etc/init.d/mysqld start
新たにログファイルが生成され、MySQLが起動すれば設定完了です。
その他参考
- innodb_log_file_size 変更手順 – koziyの日記
http://d.hatena.ne.jp/koziy/20070911/1189472682 - 第30回 MySQL 5.0のセキュリティ・ホールとInnoDBの設定 – オープンソース:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20061003/249777/?P=4 - innodb_log_file_sizeを変える – urekatのスカンク日記3
http://d.hatena.ne.jp/urekat/20090423/1240473193