innodb_log_file_sizeを変更する方法

MySQL

innodb_log_file_sizeの変更手順。

mysql> SET GLOBAL innodb_fast_shutdown=0;
# /etc/init.d/mysql.server stop
# mv ib_logfile* /tmp/
# /etc/init.d/mysql.server start

コピペ用:

/etc/init.d/mysql.server stop  && sleep 1 && mv ib_logfile* /tmp/ && /etc/init.d/mysql.server start

innodb_log_file_sizeとは、

ログ グループ内のそれぞれの長いファイルのバイトでのサイズ。ログ ファイルの結合したサイズは32ビット コンピュータ上で 4GB 以下でなければいけません。デフォルトは5MB です。実用的な値は、N がグループ内のログ ファイル数だとして、バッファ プールのサイズの1MB から 1/N-th です。 値が大きいほど、ディスク I/O を節約し、バッファ プール内で必要とされるチェックポイント フラッシュ活動は少なくなります。しかし、ログ ファイルが大きいという事はクラッシュした時の復旧のスピードが遅いという事も意味します。

my.cnfのコメントに、推奨値はinnodb_buffer_pool_sizeの25%が書いてありました。
上記の説明とは食い違うなぁ。

Set the log file size to about
25 % of the buffer pool size

innodb_log_file_sizeの値の影響はどの辺にあるかというと、

この値が大きいほど、バッファプールで必要となるチェックポイントフラッシュの回数が減るため、ディスク I/O が削減される。

とあるので、書き込みが少ない用途の場合はこの値が少なくてもいいということか。

そこで、innodb logファイルの更新日を見てみたら、3日ほどローテーションされていないから、この場合は4MBでも十分みたい。

# ll -h ib_logfile*
-rw-rw----  1 mysql mysql 2.0M 2009/12/01 13:57:44 ib_logfile0
-rw-rw----  1 mysql mysql 2.0M 2009/11/28 11:27:27 ib_logfile1

Ref:
http://q.hatena.ne.jp/1236080287

もし、ib_logfileを移動しないで再起動すると、mysqld自体は起動しますがストレージエンジンの参照ができなくなります!
ほんとこれはトリッキー。mysqldのrestartは成功するけど、mysqlを利用できない。エラー内容は.frmが壊れているというようなメッセージが表示されるので、原因特定が難しい。

その際は以下のようなエラーがmysqlのログファイルに書かれます。

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 268435456 bytes!
090813 11:00:18 [Warning] 'user' entry '[email protected]' ignored in --skip-name-resolve mode.
090813 11:00:18 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.0.81-community-log'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL Community Edition (GPL)
090813 11:00:19 [ERROR] /usr/sbin/mysqld: Incorrect information in file: './XXXX/User.frm'
090813 11:00:19 [ERROR] /usr/sbin/mysqld: Incorrect information in file: './XXXX/User.frm'
090813 11:00:19 [ERROR] /usr/sbin/mysqld: Incorrect information in file: './XXXX/User.frm'

コメント