oinume journal

Scratchpad of what I learned

MySQLをインストールした後に設定する項目

MySQL 5.5用の設定は[permalink id=471]こちら[/permalink]

 

自分がMySQLをインストールしたあとに行う設定を備忘録がてら書いてみます。サーバのスペックによって若干変動するところもありますが、チューニングする項目というのは大体こんなもんでしょう。

 

user = mysql

pid-file = /var/run/mysqld/mysqld.pid

socket = /var/run/mysqld/mysqld.sock

port = 3306

basedir = /usr

datadir = /var/lib/mysql

tmpdir = /tmp

language = /usr/share/mysql/english

skip-external-locking

# ここまではわりとお決まりの設定。環境によってファイルのパスは適宜変えます。

 

# サーバ側で使用する文字コードの設定

default-character-set = utf8

# クライアント/サーバ側での文字コード変換を行わない

skip-character-set-client-handshake

# CREATE TABLE する際に ENGINE=InnoDB の指定をしなくてもInnoDBにする

default-table-type = InnoDB

# クライアント/サーバがやり取りすることのできるパケットサイズを指定

# 巨大なデータをやり取りする場合は指定した方がよい

max_allowed_packet = 16M

 

# MyISAMで使用するINDEXのキャッシュサイズ

key_buffer = 64M

# スレッドのスタック領域のサイズ

thread_stack = 128K

# 生成されたコネクション用のスレッドをキャッシュしておく数

thread_cache_size = 16

# 最大同時接続数。メモリ搭載量にもよるが100〜300ぐらいが良いらしい

max_connections = 150

# MyISAMで一度開いたテーブルをキャッシュしておく数

table_cache = 128

# 同時に実行できるスレッド数。CPUのコア数の2倍を設定

thread_concurrency = 2

 

# query cacheの設定

# 0: OFF, 1:ON, 2:DEMAND

query_cache_type = 1

# キャッシュするクエリ結果の最大サイズ

query_cache_limit = 1M

# クエリキャッシュに割り当てるメモリ量

query_cache_size = 16M

 

# slow logの設定

log_slow_queries = /var/log/mysql/mysql-slow.log

# 3秒以上かかったクエリは上記ログファイルに出力

long_query_time = 3

 

# ここからレプリケーションの設定

# MySQLサーバごとに固有のID

server-id = 1

# バイナリログ出力先

log_bin = /var/log/mysql/mysql-bin.log

# データ書き込み(トランザクションのコミット)を何回行ったらバイナリログを

# フラッシュするかの回数。0の場合はデータ書き込みがあってもバイナリログをフラッシュしない

sync_binlog = 0

# バイナリログを保持しておく日数

expire_logs_days = 60

# バイナリログの1ファイルあたりの最大サイズ

max_binlog_size = 1024M

# バイナリログを出力する対象のDB

binlog_do_db = hoge

# バイナリログの出力対象外とするDB

binlog_ignore_db = mysql information_schema

 

# Berkley DBは使わない

skip-bdb

 

# InnoDBのデータファイルの名前とどのぐらいで自動拡張するか

innodb_data_file_path = ibdata1:128M:autoextend

# テーブルごとに.ibdのデータファイルを作成するかどうか

innodb_file_per_table = 1

# InnoDBの内部データなどを保持するための領域

innodb_additional_mem_pool_size = 20M

# InnoDBのデータやインデックスをキャッシュするためのメモリ上の領域

# DBサーバ専用のマシンの場合はメモリの50%-80%を指定

innodb_buffer_pool_size = 256M

# InnoDBの更新ログを記録するメモリ上の領域

innodb_log_buffer_size = 8M

# InnoDBの更新ログを記録するディスク上のファイルのサイズ

# 大きくするとパフォーマンスはあがるがクラッシュ時のリカバリに時間がかかるようになる

innodb_log_file_size = 64M

# データをファイルに書き込む際のメソッド

# Linuxの場合は O_DIRECTがパフォーマンス的にはよい

innodb_flush_method = O_DIRECT

# InnoDBのログバッファをInnoDBログファイルに書き込むタイミングを決める

# 基本的には1

innodb_flush_log_at_trx_commit = 1

# 2相コミットを行うかどうか

innodb_support_xa = OFF

# クラッシュ対策としてデータの二重書き込みを無効にする

skip-innodb_doublewrite

 

innodb_で始まるInnoDB関連の設定項目の詳細についてはMySQL5開拓団 ストレージエンジンの吟味 (2)にとても詳しく載っているので一読してみた方がよいです。あとはDSAS開発者の部屋:5分でできる、MySQLのメモリ関係のチューニング!も非常に参考になるでしょう。MySQLの設定はなかなか奥が深いですが、設定項目の意味を理解していればよいパフォーマンスを引き出せると思います。