简体   繁体   English

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

[英]How to flush data from mysql.slow_log table in mysql?

嗨,我正在使用MySQL 5.5版,有人可以帮我清除/刷新mysql中的mysql.slow_log表中的数据吗?

You can avoid locking problems without disabling the slow log by using the built-in rotate function: 您可以使用内置的旋转功能在不禁用慢速日志的情况下避免锁定问题:

CALL mysql.rds_rotate_slow_log;
DELETE FROM mysql.slow_log_backup;

This will swap the 'slow_log' and 'slow_log_backup' tables, moving all of the data you want to clear to the non-locked 'slow_log_backup' table, which will happily take the DELETE FROM for data purging purposes. 这将交换'slow_log'和'slow_log_backup'表,将您要清除的所有数据移动到非锁定的'slow_log_backup'表,这将很乐意将DELETE FROM用于数据清除目的。

You can also just invoke rotation twice: 您也可以只调用两次旋转:

CALL mysql.rds_rotate_slow_log;
CALL mysql.rds_rotate_slow_log;

TRUNCATE mysql.slow_log

From Mysql Documentation: 来自Mysql文档:

TRUNCATE TABLE is a valid operation on a log table. TRUNCATE TABLE是日志表上的有效操作。 It can be used to expire log entries. 它可用于使日志条目到期。

If you are on linux 如果你在Linux上

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

It will give you an error that you can't lock log tables. 它会给您一个无法锁定日志表的错误。 Work around is, run the following queries: 解决方法是,运行以下查询:

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

Taken from "DELETE old rows from Mysql General Log Table" 摘自“从Mysql通用日志表中删除旧行”

Update: 更新:

You can truncate the table like TRUNCATE mysql.slow_log as mentioned by Renato Liibke 您可以像Renato Liibke所提到的那样截断TRUNCATE mysql.slow_log这样的表

For me this works: 对我来说,这有效:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM