MySQL慢日志配置

Kat*_*kas 4 mysql performance configuration slow-log

有没有办法让 MySQL 慢日志每天启动新的日志文件?目前它只是一个大文件,并且每天都必须grep行。为每一天的慢日志设置单独的文件会方便得多。

我是否必须配置 my.cnf 或某些 linux 功能?

Der*_*ney 5

更新 正如 Aaron 指出的那样,复制和截断可能会错过一些条目。所以更安全的方法是移动和FLUSH

原来的

这篇文章有我使用的轮转慢查询日志的基本原理。基本上你需要将慢日志复制到一个新文件,然后截断slow.log的内容:

cp log/slow.log log/slow.log.`date +%M`; > log/slow.log
Run Code Online (Sandbox Code Playgroud)

如果你只是将慢日志移动到一个新文件并创建一个新的 'slow.log',它不会工作,因为移动的文件仍然具有相同的 inode,而 mysql 仍然打开它。我想移动文件然后发出FLUSH SLOW LOGS命令会起作用,因为这会关闭文件并重新打开,但我发现复制和截断同样有效并且不需要登录到 mysql。

他的文章提到在 Linux 中使用 logrotate,但我只是做了一个 cronjob,每天在午夜运行一次来​​为我做这件事。

此外,为了解决复制问题FLUSH LOGS

FLUSH LOGS、FLUSH MASTER、FLUSH SLAVE 和 FLUSH TABLES WITH READ LOCK(带或不带表列表)在任何情况下都不会写入二进制日志,因为如果复制到从属设备会导致问题。[源代码]

所以不会,因为这些语句没有写入二进制日志,所以不会干扰复制。出于您的目的,我会指定FLUSH SLOW LOGS仅关闭/打开慢查询日志。

  • 复制和截断可能会遗漏条目。mv + FLUSH LOGS 不会。 (2认同)