如何在mysql中清空mysql.slow_log表中的数据?

6

你好,我正在使用MySQL版本5.5,在MySQL中,有没有人能够帮我清除/刷新mysql.slow_log表中的数据?


请参考这个链接 - Raptor
4个回答

23

通过使用内置的rotate功能,您可以避免在不禁用慢日志的情况下出现锁定问题:

CALL mysql.rds_rotate_slow_log;
DELETE FROM mysql.slow_log_backup;

这将交换'slow_log'和'slow_log_backup'表,将您想要清除的所有数据移动到未锁定的'slow_log_backup'表中,该表将愉快地接受DELETE FROM以进行数据清除。

您也可以调用两次旋转:

CALL mysql.rds_rotate_slow_log;
CALL mysql.rds_rotate_slow_log;

非常直接和有用的方法,伙计。我只是不明白为什么你到现在还没有得到赞。非常感谢! - Miere
+1 正是我在寻找的!如果问题标记为 RDS,你会得到很多赞。 - Tiago Lopo
1
太好了!感谢分享这个小宝石,我不知道 RDS 自己有存储过程。 - Eric L.
1
mysql> CALL rds_rotate_slow_log; 然后出现以下错误:ERROR 1305 (42000): PROCEDURE mysql.rds_rotate_slow_log 不存在;MySQL 版本 14.14 Distrib 5.7.20。 - Happy

17

TRUNCATE mysql.slow_log

来自Mysql文档:

TRUNCATE TABLE是在日志表上执行的有效操作。它可以用于过期日志条目。


4
这个答案不应该排在最前面吗? - rnbguy

7
如果您使用的是Linux系统
> mysql -uroot -p
> enter your password
> use mysql;
> delete from slow_log;

如果你试图锁定日志表,会收到一个错误。解决方式是运行以下查询:

SET GLOBAL slow_log= 'OFF';
RENAME TABLE slow_log TO general_log_temp;
DELETE FROM `general_log_temp`;
RENAME TABLE general_log_temp TO slow_log ;
SET GLOBAL slow_log = 'ON';

以下内容摘自"从Mysql General Log表中删除旧记录"

更新:

你可以像Renato Liibke提到的那样截断表,例如TRUNCATE mysql.slow_log


从slow_log删除记录时出现错误“Error Code:1556。您不能在日志表中使用锁定。” - Vikrant More
出现了另一个错误 DELETE FROM mysql.general_log_temp 错误代码:1175。您正在使用安全更新模式,并尝试更新一个没有使用关键列的 WHERE 的表。要禁用安全模式,请在首选项中切换选项。 - Vikrant More
未知系统变量 "slow_log"? - Mr. Developerdude
@LennartRolland 那是一张表。使用 use mysql 选择 MySQL 数据库,然后有一个名为的表,您可以通过使用此查询进行验证 show tables like '%slow_log%' - Danyal Sandeelo

0

对我来说,这个可以工作:

SET GLOBAL slow_query_log= 'OFF';
RENAME TABLE slow_log TO general_log_temp;
DELETE FROM `general_log_temp`;
RENAME TABLE general_log_temp TO slow_log ;
SET GLOBAL slow_query_log = 'ON';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接