【问题标题】:DELETE old rows from Mysql General Log Table (MyISAM not CSV)从 Mysql 常规日志表中删除旧行(MyISAM 不是 CSV)
【发布时间】:2014-01-25 22:39:52
【问题描述】:

我想从mysql.general_log 表中删除旧行,但遇到了这个错误:

#1556 - You can't use locks with log tables.

这是我运行的查询:

DELETE FROM `general_log` WHERE `event_time` < "2014-01-25 14:05"

【问题讨论】:

  • 有几个bugs filed 反对这个。这似乎是一个持续的外观错误。你的查询真的有效吗?如果是这样,请忽略该消息。
  • 我有同样的问题,但是当我尝试接受的解决方案时,我得到:#1017 - Can't find file: '.\XXX@002XXX\general_log.frm'可以解决这个问题吗?
  • 我不确定,但您是使用表格还是文件来输出错误?见这里:dev.mysql.com/doc/refman/5.7/en/log-destinations.html
  • 我不得不四处寻找一些额外的问题,techhero 中的重命名表由于权限而失败。我还发现我有一个非常旧的 general_log 表,它不再工作了。我使用:stackoverflow.com/questions/12247063/… 对其进行了更新,现在一切正常。

标签: mysql logging


【解决方案1】:

您可以重命名表,根据需要执行清理,然后再次恢复表名。

例子:

SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
DELETE FROM `general_log_temp` WHERE `event_time` < DATE(NOW());
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';

【讨论】:

  • 以上对我有用,但只有在我按照文档关闭日志记录后:SET GLOBAL general_log = 'OFF';
  • 您可能还想选择正确的数据库,从use mysql 开始,然后执行答案中的操作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 2018-04-15
  • 2013-05-25
  • 1970-01-01
相关资源
最近更新 更多