MySQL 5.6は、数々のパフォーマンスの改善は当然のことながらそれに限らず、たくさんの素晴らしい新機能がある。ところが、InnoDBの全文検索やオプティマイザ、パフォーマンススキーマの改善、GTIDなど広く話題に上る機能がある一方で、誰も話に出さないような小さな改善もいくつかある。
そういう機能の一つを…これから紹介しよう。
過去約7年に渡るPerconaでの仕事の中で、私のレポートのおよそ97.35%は以下のような手順を含んでいる。
InnoDBのトランザクションログファイルのサイズを変えるためには、以下の手順に従うこと。手順を順に実行しないと、サーバは起動しなくなるか、InnoDBが無効の状態で起動してエラーが記録される。
1. my.cnfの以下の変数を変更あるいは追加
innodb_log_file_size = XXXM
2. MySQLサーバを停止
3. エラーログを確認し、停止に成功したことを確認
4. 古いログファイルを以下のコマンドで移動(この時点でログがどこにあるのか改めて確認)
mv /var/lib/mysql/ib_logfile* /tmp/
5. MySQLサーバを起動。新しいトランザクションログファイルが作られるので、やや起動に時間がかかる。
6. MySQLサーバが起動したことを確認できたら、古いログファイルを削除。
rm /tmp/ib_logfile*
時々、それは安全なのかとか本当にやる必要があるのかといった質問をされることもあるが、そういった警告は気にしない。多くの場合には、トランザクションログのサイズを増やすのは、InnoDBを使っているMySQLサーバではでき得る一番いいことだからだ。
秘密の機能
これからは、MySQL 5.6が動いているシステムでは、手順が以下のように短くなって、私の仕事(もちろんあなたのも)はとても楽になるだろう。
innodb_log_file_size(と一緒に推奨設定も入れる)を変更して、MySQLを再起動
InnoDBトランザクションログファイルサイズの自動変更 と私は呼んでいる。MySQLがどう反応するか知りたい?この通りだ。
2013-08-20 13:57:37 5048 [Warning] InnoDB: Resizing redo log from 2*3072 to 2*32768 pages, LSN=1626007
2013-08-20 13:57:37 5048 [Warning] InnoDB: Starting to delete and rewrite log files.
2013-08-20 13:57:37 5048 [Note] InnoDB: Setting log file ./ib_logfile101 size to 512 MB
InnoDB: Progress in MB: 100 200 300 400 500
2013-08-20 13:57:39 5048 [Note] InnoDB: Setting log file ./ib_logfile1 size to 512 MB
InnoDB: Progress in MB: 100 200 300 400 500
2013-08-20 13:57:41 5048 [Note] InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0
2013-08-20 13:57:41 5048 [Warning] InnoDB: New log files created, LSN=1626007
(削除も新規作成も)両方動いた! このシンプルさはなかなかのものだ。あなたの一番好きなMySQL 5.6の機能を教えてくれ。心配するな。秘密にする必要はない。もちろん、その勇気があるならね。