High Performance MySQL 3rd Edtionを読み終わったので、自分の知識をより確かなものにするためと自分の備忘録用に下記ぐらいのスペックのサーバーにチューニングしたMySQLの「my.cnf」を作ってみた。
OS: Linux
CPU: 8 core
Memory: 16GB
my.cnfを作成するにあたって。MySQLに付属している設定ファイルのサンプルは、内容があまりにも古すぎて役に立たないので、設定のひな形を作るために、Perconaという会社の提供しているConfiguration Wizardを使用した。
必要要件を入れていくだけである程度チューニングされた設定ファイルが生成されるので便利です。
自動生成された、設定ファイルに、足りない設定を肉付けしていったのが下記の設定になります。
自分で言うのもなんだが、性能にもデーターの信頼性にも妥協しない設定だと思う。でもこの設定を本番のサーバーに入れて問題が起きても責任はとらないよw
ディスクへの書き込みのタイミングやbinlogへの書き込みのタイミングの設定で、データーの信頼性を下げればもう少し性能を上げることができるはずだがおすすめはできない。
この設定は、MySQL5.5専用のパラメーターが入っているのでMySQL5.5以前のサーバーに入れるとエラーが出て起動しないので若干の修正が必要になります。
キャッシュ付きのRAIDカードやSSDなどを使用している場合には、innodb_io_capacityの設定をしてあげたほうがよいかもしれないです。
[mysql]
##
# CLIENT
##
port = 3306
socket = /var/lib/mysql/data/mysql.sock
[mysqld]
##
# GENERAL
##
server-id = 10
user = mysql
default_storage_engine = InnoDB
character-set-server = utf8
socket = /var/lib/mysql/data/mysql.sock
pid_file = /var/lib/mysql/data/mysql.pid
skip-external-locking
skip-name-resolve
##
# MyISAM
##
key_buffer_size = 512M
myisam_sort_buffer_size = 128M
myisam_recover = FORCE,BACKUP
##
# SAFETY
##
max_allowed_packet = 64M
max_connect_errors = 1000000
##
# DATA STORAGE
##
datadir = /var/lib/mysql/data/
##
# BINARY LOGGING
##
log_bin = /var/lib/mysql/data/mysql-bin
expire_logs_days = 14
sync_binlog = 1
##
# CACHES AND LIMITS
##
sort_buffer_size = 4M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
join_buffer_size = 1M
query_cache_type = 1
query_cache_size = 128M
tmp_table_size = 512M
max_heap_table_size = 512M
table_definition_cache = 4096
table_open_cache = 4096
max_connections = 1024
thread_cache_size = 300
back_log = 300
open_files_limit = 65535
##
# INNODB
##
innodb_thread_concurrency = 20
innodb_buffer_pool_instances = 8
innodb_buffer_pool_size = 8G
innodb_flush_method = O_DIRECT
innodb_log_files_in_group = 2
innodb_log_file_size = 1G
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1
innodb_additional_mem_pool_size = 32M
##
# LOGGING
##
log_error = /var/lib/mysql/data/mysql-error.log
log_queries_not_using_indexes = 0
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /var/lib/mysql/data/mysql-slow.log
次は、上記の設定の重要そうなパラメーターの解説をします・・・