有没有办法让MySQL慢速日志每天启动新的日志文件?目前它只是一个大文件,每天都要有grep行。如果每一天都有单独的文件,慢日志就更方便了。
我是否必须配置my.cnf或某些linux特性?
发布于 2012-03-30 21:11:02
大家都习惯了这个,好旧的文本文件。
只需运行以下命令,每天刷新一个缓慢的日志
步骤01)关闭慢速查询日志
SET GLOBAL slow_query_log = 'OFF';第二步)复制文本文件
cat slow-query.log | gzip > /logs/slow-query-`date +"%Y%m%d-%H%M"`.log.gz)将文件截断为零字节
echo -n > slow-query.log 打开慢速查询日志
SET GLOBAL slow_query_log = 'ON';您可以切换到log-output=TABLE,并将其作为要查询的表处理。
步骤01)将mysql.slow_log从CSV转换为MyISAM
ALTER TABLE mysql.slow_log ENGINE = MyISAM;第二步)索引表
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';这是所有的慢速日志..。
发布于 2012-03-30 14:59:42
正如Aaron所指出的,复制和截断有可能遗漏一些条目。因此,更安全的方法是移动和FLUSH。
这篇文章有旋转我使用的慢速查询日志的基本原则。基本上,您需要将缓慢日志复制到一个新文件中,然后截断slow.log的内容:
cp log/slow.log log/slow.log.`date +%M`; > log/slow.log如果您只是将缓慢日志移动到一个新文件并创建一个新的“sl.log”,它将无法工作,因为移动的文件仍然具有相同的inode,而mysql仍然打开它。我想移动这个文件然后发出一个FLUSH SLOW LOGS命令就可以了,因为它会关闭文件并重新打开,但是我发现复制和截断同样有效,并且不需要登录到mysql。
他的文章提到在Linux中使用log转速,但我只是做了一个cron作业,每天午夜运行一次,为我做这件事。
此外,要解决FLUSH LOGS上的复制问题:
在任何情况下,都不会将带有读取锁的刷新日志、刷新主、刷新从表和带有表列表的同花顺表写入二进制日志,因为如果将它们复制到从属程序中会导致问题。[src]
所以没有,因为这些语句没有写入二进制日志,所以不会干扰复制。为了您的目的,我将指定FLUSH SLOW LOGS只关闭/打开慢速查询日志。
发布于 2012-03-30 16:43:24
使用Logrotate.d每天旋转文件,并保留您想要的多少天,或者移动它们,off...then从同一个脚本发出一个刷新日志,以使MySQL启动一个新的file....having,在日志旋转中,设置为每日应该可以得到你想要的东西。
我希望有一天他们实现类似于“expire_log_days”的东西来调试像genlog和慢速日志这样的日志。
https://dba.stackexchange.com/questions/15863
复制相似问题