MySQL 旋转后没有将错误记录到新文件吗?

MySQL 旋转后没有将错误记录到新文件吗?

问题解决了,但我将其写下来以供将来参考。

/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

答案1

在中postrotate,我将 stderr 和 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

来源:

答案2

我遇到了类似的问题。

添加后我没有重新启动 MySQL /root/.my.cnf,因此没有运行 postrotate flush 命令。

一旦我重新启动 MySQL,它就会读取根 my.cnf 文件并按预期工作。

答案3

就我而言,块/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中使用的相同密码。从安全角度来看,类似于:owned by和 chmodded to 。/root/.my.cnf/etc/mysql/debian.cnf/root/.my.cnfroot:root0600

答案4

就我而言。我需要--defaults-file="/root/.my.cnf"设置/root/.my.cnf/usr/local/mysql/bin/mysqladmin --defaults-file="/root/.my.cnf" ping/usr/local/mysql/bin/mysqladmin --defaults-file="/root/.my.cnf" flush-logs

/etc/logrotate.d/mysql

/var/log/mysql/mysql_general_log.log
/var/log/mysql/error.log {
        create 600 mysql mysql
        notifempty
        daily
        rotate 5
        missingok
        compress
    postrotate
    # just if mysqld is really running
    if test -x /usr/local/mysql/bin/mysqladmin && \
        /usr/local/mysql/bin/mysqladmin --defaults-file="/root/.my.cnf" ping &>/dev/null
    then
        /usr/local/mysql/bin/mysqladmin --defaults-file="/root/.my.cnf" flush-logs
    fi
    endscript
}

/root/.my.cnf的有

-rw------- 1 root root 43 Mar 21 20:51 .my.cnf

[mysqladmin]
password= 111
user= root

相关内容