2012年5月11日金曜日

mysqlサーバを稼働させる上で最低限検討が必要な設定


mysqlサーバを稼働させる上で最低限検討が必要だと思っている設定をメモしておく。

◆ コンフィグ設定
# vi /etc/my.cnf

[mysqld]
### 基本設定 ###
# データベースのデータファイルやテーブルを保管するディレクトリ
datadir = /var/lib/mysql/

# mysqldがlistenするポート番号
port = 3306

# mysqlインスタンスの実行OSユーザ
user = mysql

# サーバを識別する番号
# マスタ、スレーブ構成をとる場合に各DBサーバごとにユニークな値を指定する
server-id = 1

# UNIXソケットファイルによる接続のためのファイル
# ローカルではTCP/IPを使わない
socket = /var/lib/mysql/mysql.sock

# 文字コード関連
character-set-server = utf8
skip-character-set-client-handshake




### ストレージエンジン(InnoDB)関連の設定 ###
# ストレージエンジンの選択
# トランザクションに対応(ACID特性をサポート)させるたいので選択肢は限られる
default-storage-engine = InnoDB

# InnoDBのデータファイルの保存ディレクトリ
# 配下にibdata1という名前の10MBの自動延長データファイルと
# ib_logfile0とib_logfile1という名前の5MBのトランザクションログファイルが作成される
innodb_data_home_dir = /var/lib/mysql/

# データファイルをメモリ上で管理するためのバッファサイズ
# サーバ内に大きなプロセスがなければ物理メモリサイズの60~80%を目安に
innodb_buffer_pool_size = 1024M

# データファイル、ログファイルの読み書き方式の指定
# O_DIRECTを指定すると、OSのダイレクトIOを有効にできる
# InooDBのメモリ領域とディスク間のデータのやりとりに
# OSのファイルシステムキャッシュが挟まれなくなる
innodb_flush_method = O_DIRECT

# テーブルの分割
# 熟考した上で実施しないとパフォーマンスが下がるため下記は設定しない
# innodb_file_per_table

# データ領域のサイズの設定
# ディスクがある限り使えればいいという設計のため不要
# innodb_data_file_path




### ログ ###
## トランザクション(REDO)ログ ##
# トランザクションログファイルをおくディレクトリ名を指定
# この配下にiba_logfileXXXというトランザクションログファイルができる
# トランザクションログはデータファイルを更新する前に変更分が
# 先立ってロギングされなければならないというWAL(Write Ahead Loggin)を実現させるためにある
innodb_log_group_home_dir = /var/lib/mysql/

# トランザクションログファイルのサイズ
# サイズが小さいと、チェックポイントの作成のため同期書き込みが発生しやすくなる
# しかし、リカバリは高速になる
# サイズを大きくした場合のメリットとデメリットは上の反対である
# ただし、本ログはシーケンシャルライトになるため、そこまで遅くならない
innodb_log_file_size = 128M

# トランザクションログファイル数
innodb_log_files_in_group = 2


## クエリログ ##
# クエリログの記録
# select文などのクエリログは記録しないでいいだろうか
# log


## 更新ログ ##
# 更新ログの記録
# update文などの更新ログは記録しないでいいだろうか
# log_update


## スローログ ##
# クエリログの記録
# ver 5.1以降
# long_query_timeで閾値を決められる
# mysqldumpslowコマンドでスローログの解析もできる
#(例)mysqldumpslow -s at /var/log/mysql-slow.log
slow_query_log = ON
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 10

# ver 5.0以前
log-slow-queries = /var/log/mysql-slow.log
long_query_time = 10


## エラーログ ##
# エラーログの記録
# mysqldからではなく、mysqld_safe経由で出力させるのでここでは不要である
# log-error


## バイナリ(ロールフォワード)ログ ##
# バイナリログを有効にする
# バックアップを定期的に取得するならば
# バックアップ完了時からロールフォワードさせるため必須である
# mysqld-bin.XXXXXのようなログファイルが作成される
log-bin = mysqld-bin

# バイナリログをローテートする容量
# 設定値に達しなくとも、FLUSH LOGS文を実行した時、mysqldの起動時もローテートされる
max_binlog_size = 1G




### その他最低限のチューニング ###
# mysqlに接続できる上限数の指定(ディフォルトは100)
max_connections = 1000



[mysqld_safe]
# エラーログの記録
log-error = /var/log/mysqld.log

# pidの保存ファイル
pid-file = /var/run/mysqld/mysqld.pid



設定を反映させるために再起動が必要である。
# /etc/init.d/mysqld restart

設定した変数はコマンドで確認できる。
# mysql -u root -e "SHOW VARIABLES"

設定値が適切であるかどうか、チューニングの必要性の判断にサーバのステータスを確認する。
# mysql -u root -e "SHOW STATUS"

ワイルドカードも使える。
# mysql -u root -e "SHOW STATUS LIKE 'Threads_%'"



以上の設定がしてあるという前提で、
続いて、mysqlサーバを運用する上でバックアップ方針をどうするか検討する。