vm上にMySQLの開発環境作った時のメモ

MySQLのバージョン
Server version: 5.1.37-1ubuntu5-log (Ubuntu)

my.cnfに追記したもの


default-character-set = utf8
general-log = 1
general-log-file = /var/log/mysql/mysqld.log
slow-query-log = 1
log-slow-queries = /var/log/mysql/mysqld-slow.log
long-query-time = 0.01
default-storage-engine = InnoDB
transaction-isolation = READ-COMMITTED
log-bin = mysql-bin
binlog-format = mixed
innodb_buffer_pool_size = 134217728

  • default-character-set

デフォルトのキャラセット
show variables like '%char%';の出力が以下になるように設定することが多い。
[mysqld]の箇所のみだと下記のようにならないので注意

Variable_name Value
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/

  • general-log

一般クエリログを使用するか 1 = YES, 0 = NO

  • general-log-file

一般クエリログのパス

  • slow-query-log

スロークエリログを使用するか 1 = YES, 0 = NO

  • log-slow-queries

スロークエリログのパス

  • long-query-time

ここで設定した値よりコストの大きいものをスロークエリとして記録
5.0以下のバージョンでは少数点以下の設定は出来ない

  • default-storage-engine

デフォルトストレージエンジンの設定
設定しない場合MyISAM

  • transaction-isolation

トランザクション分離レベルの設定
InnoDBの場合デフォルトでREPEATABLE-READとなっている
速度重視でトランザクション内の読み込みの一貫性を必要としない場合はこちらの方が早い。
※後でベンチとります

  • log-bin

バイナリログ名

  • binlog-format

READ-COMMITTEDの場合STATEMENTだとエラーが出るのでmixedにする
エラーはこんな感じ


Binary logging not possible. Message: Transaction level 'READ-COMMITTED' in InnoDB is not safe for binlog mode 'STATEMENT'

DB単体でサーバ立ててる場合物理メモリ数の3/4を割り当てる。
そうでない場合は少なめで2割程度?

参照

  • ログについて

http://ftp.ku.ac.th/pub/mirror/mysql/doc/refman/5.1/ja/log-files.html

ログは開発時、またはサービスの開始初期等に出力するようにし
ローテートさせるのがいいと思う。

[20100630]追記
binlog-format = ROW
に変更。
理由はこの辺。
http://dev.mysql.com/doc/refman/5.1/ja/replication-sbr-rbr.html
あとこの辺も変更した。
innodb_support_xa = 0
innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT
skip-innodb_doublewrite

ACIDでなくてもいいならこれで。
binlog-format = ROWにした事以外は激速。