web-dev-qa-db-ja.com

LogrotateMysql-ローテーションは発生しません

私は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の動作について説明し、次に構成ファイルの内容を示します。

私はこれらの手順に従いました:

  1. /etc/logrotate.dに、660の権限を持つmysql(以下のコンテンツを参照)というファイルを追加しました(ファイルはルートに属しています)
  2. コマンド「logrotate-dv--force/etc/logrotate.conf」で強制的にローテーションを試みました

私が指摘した動作:

  • コマンドlogrotateによって生成されたメッセージは、/ var/lib/mysql /mysql-log.logがローテーションされたことを示しているようです。
  • 実際には、/ var/lib/mysql /には「mysql-log。*」はなく、コマンドを実行する前と同じ大きさの元のファイル/var/lib/mysql/mysql-log.logのみがありました...

ここで、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を定義する前または後の手順を見逃しましたか?

ご協力いただきありがとうございます !

シルヴァン

1
Sylvain

-dオプションを使用しているため、ローテーションはありません。マニュアルから:

-dデバッグモードをオンにし、-vを意味します。デバッグモードでは、ログまたはlogrotate状態ファイルに変更は加えられません

私は2つの提案があります:

  • OSをx86_64にアップグレード 可能であれば、プロセスごとに2.5GBのメモリ制限があるため
  • セキュリティ上の理由から、mysqlで-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
}
7
sumar

デーモンへの-HUPによってデーモンがフラッシュされ、ログが正常に再開されるかどうかを確認できませんでした。

ここに別のリファレンスがあります(そして、単純なHUPを提案するページへの別のURLが機能することを明確にするための私の試み): http://www.mysqlperformanceblog.com/2007/12/09/be-careful-rotating- mysql-logs/comment-page-1 /#comment-104396

私はmysqlの人ではないので、YMMVですが、それが正しければ、ログローテーションは他のすべての丁寧なアプリの場合と同じようにプロセスをHUPする可能性があります。

0
bish

それは--defaults-extra-file=/root/mysql/logrotate.cnfオプションでうまく機能します、私はこれで:

[client]
user     = root
password = TheRootPassword

最初のコマンドから-dvオプションを削除した後、回転をテストできました。

0
Sylvain