MySQLは回転後にエラーを新しいファイルに記録しませんか?


14

問題は解決しましたが、今後の参考のために書き留めています。

/root/.my.cnf

[mysqladmin]
user            = root
password        = pa$$w0rd

/etc/logrotate.d/mysql

/var/log/mysql-slow.log /var/log/mysqld.log {
    daily
    rotate 7
    dateext
    compress
    missingok
    #notifempty
    sharedscripts
    create 644 mysql mysql
    postrotate
        /usr/bin/mysqladmin flush-logs
    endscript
}

logrotate コマンドラインから実行する場合は正常に動作しています:

# logrotate -v -f /etc/logrotate.d/mysql

しかし、午前4時にcronから実行すると機能しません。ログファイルはローテーションされましたが、MySQLは新しく作成されたファイルにエラーを記録しません。

-rw-r--r-- 1 mysql mysql      0 Aug  7 10:13 /var/log/mysqld.log
-rw-r--r-- 1 mysql mysql     20 Aug  4 04:04 /var/log/mysqld.log-20120804.gz
-rw-r--r-- 1 mysql mysql     20 Aug  5 04:04 /var/log/mysqld.log-20120805.gz
-rw-r--r-- 1 mysql mysql     20 Aug  6 16:28 /var/log/mysqld.log-20120806.gz

回答:


12

では、postrotatestderrとstdoutの両方をログファイルにリダイレクトして、何が起こるかを確認します。

postrotate
    /usr/bin/mysqladmin flush-logs > /var/log/mysqladmin.flush-logs 2>&1
endscript

私が得るものは:

/usr/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'

logrotate中にmysqladmin読み取れないよう/root/.my.cnfです。

だから、これを試してください:

postrotate
    env HOME=/root/ /usr/bin/mysqladmin flush-logs > /var/log/mysqladmin.flush-logs 2>&1
endscript

ソース:


1

同様の問題がありました。

を追加した後/root/.my.cnf、MySQLを再起動しなかったため、postrotate flushコマンドは実行されませんでした。

MySQLを再起動すると、ルートmy.cnfファイルが読み取られ、期待どおりに機能しました。


0

私の場合、ブロックは/etc/logrotate.d/mysql少し異なって見えました:

postrotate
        test -x /usr/bin/mysqladmin || exit 0

        if [ -f `my_print_defaults --mysqld | grep -oP "pid-file=\K[^$]+"` ]; then
            # If this fails, check debian.conf!
            mysqladmin --defaults-file=/etc/mysql/debian.cnf flush-logs
        fi
endscript

コメントに注意してください:「これが失敗した場合、debian.confをチェックしてください!」そして、パラメータを持つコマンド--defaults-file=/etc/mysql/debian.cnf。このファイルにはまったく同じ[client]セクションrootがあり、空のパスワードを持つユーザーを定義しています。したがって、明らかに、/root/.my.cnfそのファイルにも同じパスワードを使用する必要がありました。セキュリティに関して/etc/mysql/debian.cnfは、/root/.my.cnf所有者root:root、およびに変更され0600ます。


0

だから、私の場合、debian-sys-maintユーザーgalera-clusterごとに権限の問題があります。なぜなら、各ノードは同じ整合性を持っているからです。ただし、各ノードは個別にインストールします。/etc/mysql/debian.cnf

したがって、logrotateファイルには次のとおりです。

postrotate
    test -x /usr/bin/mysqladmin || exit 0
    if [ -f `my_print_defaults --mysqld | grep -oP "pid-file=\K[^$]+"` ]; then
        # If this fails, check debian.conf!
        mysqladmin --defaults-file=/etc/mysql/debian.cnf --local flush-error-log \
          flush-engine-log flush-general-log flush-slow-log
    fi
endscript

とても簡単な解決策はdebian-sys-maint、1つのノードでユーザーのパスワードを変更し、すべてのノードで '/etc/mysql/debian.cnf'ファイルにパスワードを設定することです。

SET PASSWORD FOR 'debian-sys-maint'@'localhost' = password('YOUR PASSWORD');

私の役に立てば幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.