如何从 mysql.slow_log table 刷新 mysql 中的数据?

How to flush data from mysql.slow_log table in mysql?

您好,我正在研究 MySQL 5.5 版,有人可以帮我从 mysql 中的 mysql.slow_log 表中获取 clear/flush 数据吗?

如果你在 linux

> mysql -uroot -p
> enter your password
> use mysql;
> delete from slow_log;

它会给你一个错误,你不能锁定日志 tables。解决方法是,运行 以下查询:

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';

取自"DELETE old rows from Mysql General Log Table"

更新:

您可以运行像table这样 TRUNCATE mysql.slow_log 正如 Renato Liibke 所提到的

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

CALL mysql.rds_rotate_slow_log;
DELETE FROM mysql.slow_log_backup;

这将交换 'slow_log' 和 'slow_log_backup' tables,将您要清除的所有数据移动到未锁定的 'slow_log_backup' table,这将很高兴地使用 DELETE FROM 进行数据清除。

您也可以只调用旋转两次:

CALL mysql.rds_rotate_slow_log;
CALL mysql.rds_rotate_slow_log;

TRUNCATE mysql.slow_log

来自 Mysql 文档:

TRUNCATE TABLE 是对日志 table 的有效操作。它可用于使日志条目过期。

对我来说这很有效:

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';