MySQLのログローテーション

MySQLでは、標準的にインストールをしても、ログのローテーションが有効になっていません。
ログファイルが、肥大化して、サーバーの処理能力低下の原因になる可能性があります。
ログファイルが、大きくなると、ログの中身をチェックするのも苦労します。

ログローテーション設定ファイル

# vi /etc/logrotate.d/mysql


#/var/log/mysqld.log {
#        create 640 mysql mysql
#        notifempty
#        daily
#        rotate 5
#        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
#}

上記のように、コメントになっています。
これを有効にすれば、基本、動作をしますが、いろいろと設定しなければいけないことがあります。

/etc/logrotate.d/mysql
のファイルの前半部分にも記載があります。

対象ファイルと、設定

ログファイルが、
/var/log/mysqld.log

MySQLのスロークエリーのログ
WEBアプリの処理が遅くなる場合、ある、MySQLのSQL文の処理が遅い事が原因であることがあります。 この「遅い原因」が、「MySQLの処理の場合」 「遅い処理は何か」を特定する場合に、有効な設定です。 設定ファイルの変更 mys...

の記事にある
/var/log/mysql_slow.log
も一緒に動作させたい場合、

/var/log/mysqld.log {
 ↓
/var/log/mysqld.log /var/log/mysql_slow.log {

↑とします。

create 640 mysql mysql
# ↑ログファイルをパーミッション、640。ユーザとグループ、「mysql」で作成
notifempty
# ↑ログファイルが空(ゼロバイト)なら、実行しない
daily
# ↑毎日実行する
rotate 5
# ↑5世代まで、保存する。今回、過去、5日分を保存。
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

上記は、プログラムを実行する部分です。

if test -x /usr/bin/mysqladmin &&


「/usr/bin/mysqladmin」というファイルが実行可能で、かつ(&&)、

/usr/bin/mysqladmin ping

↑を実行する、正常に返れば

/usr/bin/mysqladmin flush-logs

↑を実行する。

という流れになります。

/usr/bin/mysqladmin ping

↑上記は、

# /usr/bin/mysqladmin ping
mysqld is alive

↑「mysqld is alive」と返ってくれば「正常稼働中」とうい事なのですが、

何も、設定をしないと、

# /usr/bin/mysqladmin ping
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'

とエラーとなります。

パスワードを入れずに、反応するように、設定を行います。

# mysql_config_editor set --login-path=client --user=root --host=localhost --password
Enter password: (パスワード)

↑上記のコマンドを実行して、MySQLのrootのパスワードを入力します。

すると、

# ls -al ~/.mylogin.cnf
-rw------- 1 root root 136 XXX XX XX:XX /root/.mylogin.cnf

と、「/root/.mylogin.cnf」というファイルが作成されます。

これで、

# /usr/bin/mysqladmin ping

を実行すると、

mysqld is alive

と、応答が返ってきて、MySQLが起動中ということがわかります。

/usr/bin/mysqladmin flush-logs

↑上記は、
新しいログファイルを使用することを強制的に開始する
という命令です。

例えば、
/var/log/mysqld.log
というファイルが、
/var/log/mysqld-xxxxxxx.log
というファイル名に名前を変更した場合、
/var/log/mysqld.logへのログの書き込みは、

/usr/bin/mysqladmin flush-logs
コマンドにより、開始されます。

ログローテーション、設定のチェック

最後に、設定ファイルが正しいかをチェックします

# logrotate -dv /etc/logrotate.d/mysql 
reading config file /etc/logrotate.d/mysql
error: /etc/logrotate.d/mysql:25 lines must begin with a keyword or a filename (possibly in double quotes)

↑もし、エラーがあると、上記のように、「error」と表示されます。

# logrotate -dv /etc/logrotate.d/mysql 
reading config file /etc/logrotate.d/mysql
Allocating hash table for state file, size 15360 B

Handling 1 logs

rotating pattern: /var/log/mysqld.log  after 1 days (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/mysqld.log
  log does not need rotating (log has been already rotated)

↑エラーがなければ、上記のような感じで、表示されます。

自動ログインされない場合でも、このように出てきます。

「/usr/bin/mysqladmin ping」で、「alive」と出てくるか、確認してみましょう。

タイトルとURLをコピーしました