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
と
の記事にある
/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」と出てくるか、確認してみましょう。