MariaDB(MySQL)で各種ログのローテーション設定を入れたけど、うまくローテーションされていないケースがあるかと思います。
その際の確認方法を書いていきたいと思います。
よくあるケースとして、ローテーションファイルは作成されているが、ログの書き込みが切り替わってないケース、例えば、
query.log # ログが書き込まれる予定だが書き込まれていない。
query.log-20190918 # ローテーションしたログにそのまま書き込まれている。
このようなケースの場合、flush-logs に失敗しているためとなります。
そこで、エラーの内容を確認していきたいと思います。
と言っても cron から logrotate を実行している箇所にログ出力を設定するだけになります。
実行されているファイルは↓のファイルとなりますので、この中にログ出力を書いていきます。
※root ユーザーで行っていきます。
vim /etc/cron.daily/logrotate
# 以下を修正
- /usr/sbin/logrotate /etc/logrotate.conf
+ /usr/sbin/logrotate -v /etc/logrotate.conf >/var/log/logrotate.log 2>&1
上記設定後に cron にて logrotate が実行されると logrotate.log にデバッグ情報が出力されますので、その内容を確認します。
# less /var/log/logrotate.log
よく発生するのが、↓のエラーになります。
/usr/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
こちらは、ユーザー認証に失敗しているエラーとなります。
/root/.my.cnf を使用し、コマンドからの実行は問題ないが cron からの実行にて発生している場合には、cron の HOME パスが / になっている可能性があり、/root 配下に置いている .my.cnf ファイルを見つけることができないため、発生している可能性があります。
その場合は、ローテーション設定にて↓のように明示的に指定することでうまくいきます。
/usr/bin/mysqladmin --defaults-extra-file=/root/.my.cnf flush-logs
コメント