MySQL在旋转后不会将错误记录到新文件中吗?

qua*_*nta 15 mysql logrotate

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

/root/.my.cnf

[mysqladmin]
user            = root
password        = pa$$w0rd
Run Code Online (Sandbox Code Playgroud)

/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
}
Run Code Online (Sandbox Code Playgroud)

logrotate 从命令行运行时工作正常:

# logrotate -v -f /etc/logrotate.d/mysql
Run Code Online (Sandbox Code Playgroud)

但是在凌晨 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
Run Code Online (Sandbox Code Playgroud)

qua*_*nta 12

在 中postrotate,我将 stderr 和 stdout 都重定向到日志文件以查看会发生什么:

postrotate
    /usr/bin/mysqladmin flush-logs > /var/log/mysqladmin.flush-logs 2>&1
endscript
Run Code Online (Sandbox Code Playgroud)

我得到的是:

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

听起来好像在 logrotate 期间mysqladmin没有读取/root/.my.cnf

所以,试试这个:

postrotate
    env HOME=/root/ /usr/bin/mysqladmin flush-logs > /var/log/mysqladmin.flush-logs 2>&1
endscript
Run Code Online (Sandbox Code Playgroud)

来源: