MySQLのスローログとエラーログのローテーションをさせる方法

投稿者: | 2014年5月16日

Logrotatedを使用して、MySQLのエラーログとスローログをローテーションさせる設定に、ちょっとしたコツがあったので忘れないようにまとめてみた。

[パスワードファイルの設定]

まず、MySQLをセットアップした際に、一緒にインストールされる、logrotaedの設定ファイル「/etc/logrotate.d/mysql」の中に書いてある設定方法にしたがって、MySQLの認証に使用するパスワードファイルを、rootのホームディレクトリに作る。

# vi /root/.my.cnf

[mysqladmin]
host = hostname
user = root
password = password

.my.confファイルは、rootユーザーのみが読み書き可能な設定にする。

# chown root:root .my.cnf
# chmod 600 .my.cnf

[logrotaedの設定]

標準の設定では、.my.cnfで指定した、ファイル名のファイルを、ローテーションする設定になっていないので、ローテーション対象のログファイルの名前を設定ファイルで指定する。

ログファイルの名前は、下記のように設定したとする。

エラーログ: mysql-error.log
スローログ: mysql-slow.log

ログファイル名を、指定するだけで、ログローテーションが、されるはずなのだが、なぜか、「/etc/logrotate.d/mysql」の記述にしがってパスワードファイルを作成しても、パスワードファイルを、読み込んでくれないようで、ログローテーションが正常にされなかった。

問題の解決策として、下記のようにlogrotatedの設定ファイル「/etc/logrotate.d/mysql」の内容を書き直す必要があった。

/usr/bin/mysqladmin flush-logs

設定ファイル中の上記の行を次のように書き直して、明示的にパスワードファイルを読み込むようにした。

/usr/bin/mysqladmin –defaults-extra-file=/root/.my.cnf flush-logs

上記を、踏まえた上で設定をすると、設定ファイルの内容は、下記のようになった。

# vi /etc/logrotate.d/mysql


/var/log/mysql/mysql-error.log
/var/log/mysql/mysql-slow.log
{
# create 600 mysql mysql
notifempty
daily
rotate 14
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 --defaults-extra-file=/root/.my.cnf flush-logs
fi
endscript
}

MySQLのチューニング その1
MySQLのスローログの解析


コメントを残す

メールアドレスが公開されることはありません。

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください