旋转后,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

Answers:


12

在中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

资源:


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每个节点具有相同的完整性,尽管每个节点由debian用户针对每个节点单独安装,而配置文件是/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在一个节点上更改用户密码,然后在每个节点上的“ /etc/mysql/debian.cnf”文件中设置密码即可。

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

我希望它对我有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.