是否有一种方法使MySQL慢日志每天启动新的日志文件?目前,它只是一个大文件,每天都必须抓住线条。每天放慢日志的单独文件将更加方便。

我必须配置my.cnf或某些Linux功能吗?

有帮助吗?

解决方案

每个人都习惯了这个,好的旧文本文件。

只需运行以下内容即可每天冲洗缓慢的日志

步骤01)关闭慢速查询日志

SET GLOBAL slow_query_log = 'OFF';

步骤02)复制文本文件

cat slow-query.log | gzip > /logs/slow-query-`date +"%Y%m%d-%H%M"`.log.gz

步骤03)将文件截断为零字节

echo -n > slow-query.log 

步骤04)打开慢速查询日志

SET GLOBAL slow_query_log = 'ON';

您可以切换到 log-output=TABLE 并将其作为查询表作为查询的桌子。

步骤01)将mysql.slow_log从CSV转换为Myisam

ALTER TABLE mysql.slow_log ENGINE = MyISAM;

步骤02)索引表

ALTER TABLE mysql.slow_log ADD INDEX (start_time);

步骤03)激活日志格式为表格

[mysqld]
log-output=TABLE

步骤04) service mysql restart

启动MySQLD后,慢速记录条目将记录在Myisam表mysql.slow_log中;

要在午夜之前旋转条目,您可以这样这样:

SET GLOBAL slow_query_log = 'OFF';
SET @dt = NOW();
SET @dtstamp = DATE_FORMAT(@dt,'%Y%m%d_%H%i%S');
SET @midnight = DATE(@dt) + INTERVAL 0 SECOND;
ALTER TABLE mysql.slow_log RENAME mysql.slow_log_old;
CREATE TABLE mysql.slow_log LIKE mysql.slow_log_old;
INSERT INTO mysql.slow_log SELECT * FROM mysql.slow_log_old WHERE start_time >= @midnight;
DELETE FROM mysql.slow_log_old WHERE start_time >= @midnight;
SET @sql = CONCAT('ALTER TABLE mysql.slow_log_old RENAME mysql.slow_log_',@dtstamp);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; 
SET GLOBAL slow_query_log = 'ON';

这就是慢速日志...

其他提示

更新正如亚伦指出的那样,复制和截断的可能性可能会错过一些条目。因此,更安全的方法是移动和 FLUSH.

原来的

本文 具有旋转我使用的慢速查询日志的基本原理。基本上,您需要将慢日志复制到新文件,然后截断slow.log的内容:

cp log/slow.log log/slow.log.`date +%M`; > log/slow.log

如果您只是将慢日志移动到新文件并创建新的“ slow.log”,则它将无法正常工作,因为移动的文件仍然具有相同的inode,而mySQL仍然打开它。我想移动文件然后发出 FLUSH SLOW LOGS 命令将起作用,因为它关闭文件并重新打开,但是我发现复制和截断的功能同样有效,并且不需要登录MySQL。

他的文章在Linux中提到了使用Logrotate的文章,但我只是在午夜每天跑一次,为我做这件事。

另外,解决复制问题 FLUSH LOGS:

在任何情况下,如果将锁定锁(或不带有表列表)都不会写入二进制日志,因为在任何情况下都不会将带有读取锁定的齐平高,冲洗式从奴隶和带有读取锁的冲洗表被写入二进制日志,因为如果将其复制到从属上,它们都会引起问题。 SRC

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

使用logrotate.d每天每天旋转文件并保留任意数天或将它们移开...然后从同一脚本中发出齐平log,以使mysql启动新文件。...旋转,每天都应该为您带来想要的东西。

我希望有一天他们实施类似于“ expire_log_days”的东西,用于调试日志,例如genlog和slow log

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top