MariaDB(MySQL)のログローテションがうまく行かない場合の確認方法

スポンサーリンク
スポンサーリンク

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

コメント

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