YAPC::Asiaのスライドで予告していた通り、実際に弊社のいくつかのサービスで使っている my.cnf を公開しました。

github: https://github.com/kazeburo/mysetup/tree/master/mysql

今回、公開した理由はMySQl Beginners Talksの発表の中でも触れている通りです。MySQLのソースコード中に含まれるサンプルのmy.cnfが最近のサーバハードウェアや運用に合わなくなって来ているという状況で、自分の設定にイマイチ自信が持てていない人は少なくないはず。そこで各社秘伝のタレ的な my.cnf をOpen & Shareすることで、モダンなmy.cnfを作り上げる事ができるんじゃないかという考えの下、今回 github にて公開しました。

mycnf.png

ファイルは4つあり、それぞれ MySQL 4.0、5.1、5.5、そしてテスト中のMySQL 5.6用のMySQLの設定ファイルです。

my.cnf について捕捉

説明がまったくないと公開しても意味がなさそうなので、少し補足です

サーバ環境

このmy.cnfが前提する環境は次の通りです

  • MyISAMは使わず、InnoDBのみ。MySQL 5.1以降ではInnoDB Pluginを使用する
  • サーバは 16GBのメモリを搭載し、そのメモリをMySQLがすべて使える

MyISAM系のメモリ設定は少なめにして、物理メモリの多くをinnodb_buffer_poolに割り振っています

ホスト名とserver-id

この2つの箇所は、サーバに設置する際にプログラムにより置き換えられます

prompt          = '\u@<HOSTNAME> mysql>'
server-id       = <SERVER_ID>

<HOSTNAME> は「\h」でも構わないと思いますが、弊社のサーバではhostnameとサービス上のサーバ名が異なる場合があるので管理サーバに問い合わせて埋め込んでいます。server-idはIPアドレスの第三オクテット、第四オクテットから自動計算されます

IPADDR=$(/sbin/ifconfig |grep -A 1 eth1 |grep inet|awk -F: '{print $2}'|awk '{print $1}')
SID=$(perl -e '@l=split /\./,$ARGV[0];print $l[2]*256+$l[3]' $IPADDR)
HOSTID=$(curl -s http://host-manager/lookup)
sed -i "s/<SERVER_ID>/$SID/" /path/to/my.cnf
sed -i "s/<HOSTNAME>/$HOSTID/" /path/to/my.cnf

チューニングのポイント

サーバによって次のような変更を行っています。

まず、サーバに搭載するメモリによって innodb_buffer_pool を変更します

innodb_buffer_pool = メモリの75%

書籍やWebサイトでは80%程度と書かれていますが、自分が今まで使ってきた環境では75%以上にするとSwapしてしまいます

仮想マシンなどIO性能が落ちる場合は以下の設定を変更します

innodb_write_io_threads = 8 => 少なめに
innodb_read_io_threads = 8 => 少なめに
innodb_log_file_size = 128M => 少なめに
innodb_flush_log_at_trx_commit = 1 => 2に変更

MySQL5.1以降で逆に、SSDなど高速なデバイスが使用する際は

innodb_io_capacity = 2000〜

この設定を追加しています。

さいごに

今回公開したmy.cnfのforkやpullreqは大歓迎です。そして自分も含め、MySQLの設定についての知識がもっと広がっていったらいいなと思っています

このブログ記事について

このページは、Masahiro Naganoが2012年10月 5日 12:50に書いたブログ記事です。

ひとつ前のブログ記事は「YAPC::Asia 2012 で発表してきました!日本よ、これが #yapcasia だッ!!」です。

次のブログ記事は「DBIx::DSN::Resolver::Cached をリリースしました」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 4.27-ja