MySQL5.1のlog出力とlogrotate設定

MySQL5.1.50 / CentOS5.5(64bit) 環境下での、
ログ出力とログローテーションの設定についてメモ。

ログ出力設定

/var/log/配下にmysqlディレクトリを作成して、以下3つのログを格納する。
error.log(mysqldエラーログ)、query.log(全ての発行クエリログ)、slow.log(スロークエリのログ)

(前準備)

# mysql -V
  mysql  Ver 14.14 Distrib 5.1.50, for redhat-linux-gnu (i686) using readline 5.1

# mkdir /var/log/mysql/
# touch /var/log/mysql/error.log
# touch /var/log/mysql/query.log
# touch /var/log/mysql/slow.log
# chmod 755 /var/log/mysql/
# chmod 666 /var/log/mysql/*
# chown -R mysql. /var/log/mysql/

(my.cnf設定)

# vi /etc/my.cnf

[mysqld]
#query log
log=/var/log/mysql/query.log

#slow query log
slow_query_log=ON
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=0.5

[mysqld_safe]
log-error=/var/log/mysql/error.log

[mysqladmin]
password = <*mysql password*>
user= root

(mysqld起動設定: ログ出力オプションの指定)

# vi /etc/rc.d/init.d/mysqld

$exec   --datadir="$datadir" --socket="$socketfile" \
↓
$exec   --log --datadir="$datadir" --socket="$socketfile" \

(設定反映)

# service mysqld restart

ログ確認

それぞれのログは下記のようにして確認。

# tail -fn10 /var/log/mysql/error.log
# tail -fn10 /var/log/mysql/query.log
# tail -fn10 /var/log/mysql/slow.log

ログローテーション

上記設定のままだと、膨大なログがたまるのでログローテーションを行うように、設定しておく。
ログローテーションを行う際に、mysqladminからflush-logsを利用する為、予めPATHを確認しておく。

# which mysqladmin
/usr/bin/mysqladmin

ローテートファイルの作成

# vi /etc/logrotate.d/mysql-log-rotate

/var/log/mysql/error.log {
        # create 600 mysql mysql
        notifempty
	daily
        rotate 3
        missingok
        compress
    postrotate
	# just if mysqld is really running
	if test -x /usr/bin/mysqladmin && \
	   /usr/bin/mysqladmin ping &>/dev/null
	then
	   /usr/bin/mysqladmin flush-logs
	fi
    endscript
}

/var/log/mysql/query.log {
        # create 600 mysql mysql
        notifempty
	daily
        rotate 3
        missingok
        compress
    postrotate
	# just if mysqld is really running
	if test -x /usr/bin/mysqladmin && \
	   /usr/bin/mysqladmin ping &>/dev/null
	then
	   /usr/bin/mysqladmin flush-logs
	fi
    endscript
}

/var/log/mysql/slow.log {
        # create 600 mysql mysql
        notifempty
	daily
        rotate 3
        missingok
        compress
    postrotate
	# just if mysqld is really running
	if test -x /usr/bin/mysqladmin && \
	   /usr/bin/mysqladmin ping &>/dev/null
	then
	   /usr/bin/mysqladmin flush-logs
	fi
    endscript
}

動作テスト

# logrotate -dv /etc/logrotate.d/mysql-log-rotate

query.logあたりは、膨大なログになるので、あくまで開発・デバッグやチューニング時の、一時利用がよい気がする。
それからMySQL5.1系から、クエリログをMySQLテーブルに保存することもできるみたい。
ただこの場合、無駄にMySQLコネクションが食ってしまうので、潤沢なメモリがないのなら常用しないほうがいいかな。

One Response to MySQL5.1のlog出力とlogrotate設定

  1. Pingback: MySQLのログファイルを設置

Leave a Reply

Your email address will not be published. Required fields are marked *