私はCentOS5を使用しており、次のバージョンのmysqlを使用しています。
mysql Ver 14.12 Distrib 5.0.77、readline 5.1を使用するredhat-linux-gnu(i686)用
Logrotateを使用してmysqlのログをローテーションしたいと思います。
例として、ファイル/var/lib/mysql/mysql-log.logのみをローテーションしたいとします。以下に、私が実行した手順、メモしたlogrotateの動作について説明し、次に構成ファイルの内容を示します。
私はこれらの手順に従いました:
私が指摘した動作:
ここで、onfigファイルを提供します。ログを抽出すると、mysqlに関係するコマンドlogrotateが生成されます。
/ etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {
monthly
minsize 1M
create 0664 root utmp
rotate 1
}
# system-specific logs may be also be configured here.
/ etc/logrotate.d/mysql
/var/lib/mysql/mysql-log.log {
rotate 4
daily
nocompress
missingok
create 660 mysql mysql
postrotate
if ls /proc/`cat /var/run/mysqld/mysqld.pid` > /dev/null
then
/usr/bin/mysqladmin -pMotDePasseSqlRoot flush-logs
fi
endscript
}
そして、これがmysqlに関して私が指摘したlogrotateログです:
reading config file mysql
reading config info for /var/lib/mysql/mysql-log.log
...
rotating pattern: /var/lib/mysql/mysql-log.log forced from command line (4 rotations)
empty log files are rotated, old logs are removed
considering log /var/lib/mysql/mysql-log.log
log needs rotating
rotating log /var/lib/mysql/mysql-log.log, log->rotateCount is 4
renaming /var/lib/mysql/mysql-log.log.4 to /var/lib/mysql/mysql-log.log.5 (rotatecount 4, logstart 1, i 4),
renaming /var/lib/mysql/mysql-log.log.3 to /var/lib/mysql/mysql-log.log.4 (rotatecount 4, logstart 1, i 3),
renaming /var/lib/mysql/mysql-log.log.2 to /var/lib/mysql/mysql-log.log.3 (rotatecount 4, logstart 1, i 2),
renaming /var/lib/mysql/mysql-log.log.1 to /var/lib/mysql/mysql-log.log.2 (rotatecount 4, logstart 1, i 1),
renaming /var/lib/mysql/mysql-log.log.0 to /var/lib/mysql/mysql-log.log.1 (rotatecount 4, logstart 1, i 0),
renaming /var/lib/mysql/mysql-log.log to /var/lib/mysql/mysql-log.log.1
creating new log mode = 0660 uid = 27 gid = 27
running postrotate script
running script with arg /var/lib/mysql/mysql-log.log : "
if ls /proc/`cat /var/run/mysqld/mysqld.pid` > /dev/null
then
/usr/bin/mysqladmin -pMotDePasseSqlRoot flush-logs
fi
"
removing old log /var/lib/mysql/mysql-log.log.5
Logrotatesが実際には実行しないアクションについてレポートを回転させる理由を知っていますか?ファイル/etc/logrotated.d/mysqlを定義する前または後の手順を見逃しましたか?
ご協力いただきありがとうございます !
シルヴァン
-d
オプションを使用しているため、ローテーションはありません。マニュアルから:
-dデバッグモードをオンにし、-vを意味します。デバッグモードでは、ログまたはlogrotate状態ファイルに変更は加えられません。
私は2つの提案があります:
-pPassword
パラメータを使用しないでください。rootのみが読み取り可能な--defaults-extra-file=path_to_extra
を使用することをお勧めします。サーバーにアクセスできる誰かがps -ef | grep mysql
を実行すると、データベースのrootパスワードが表示されます。CentOS 5上のmysql用のlogrotate/etc/logrotate.d/mysql
スクリプト(mysql Ver 14.12 Distrib 5.0.77、readline 5.1を使用したredhat-linux-gnu(x86_64)用)は次のとおりです。
# If the root user has a password you have to create a
# /.my.cnf configuration file with the following
# content:
#
# [mysqladmin]
# password = <secret>
# user = <username>
#
# where "<secret>" is the password and <username> is user.
#
# ATTENTION: This /.my.cnf should be readable ONLY
# for root !
/var/log/mysqld.log {
create 640 mysql mysql
notifempty
missingok
postrotate
# just if mysqld is really running
if test -x /usr/bin/mysqladmin && \
/usr/bin/mysqladmin --defaults-extra-file=/root/mysql/logrotate.cnf ping &>/dev/null
then
/usr/bin/mysqladmin --defaults-extra-file=/root/mysql/logrotate.cnf flush-logs
fi
/usr/bin/chcon -u system_u -r object_r -t mysqld_log_t /var/log/mysqld.log
endscript
}
デーモンへの-HUPによってデーモンがフラッシュされ、ログが正常に再開されるかどうかを確認できませんでした。
ここに別のリファレンスがあります(そして、単純なHUPを提案するページへの別のURLが機能することを明確にするための私の試み): http://www.mysqlperformanceblog.com/2007/12/09/be-careful-rotating- mysql-logs/comment-page-1 /#comment-104396
私はmysqlの人ではないので、YMMVですが、それが正しければ、ログローテーションは他のすべての丁寧なアプリの場合と同じようにプロセスをHUPする可能性があります。
それは--defaults-extra-file=/root/mysql/logrotate.cnf
オプションでうまく機能します、私はこれで:
[client]
user = root
password = TheRootPassword
最初のコマンドから-dv
オプションを削除した後、回転をテストできました。