【问题标题】:How to delete expired data with cron job如何使用 cron 作业删除过期数据
【发布时间】:2015-04-11 19:39:18
【问题描述】:

我想每隔 5 分钟自动删除 mysql 数据库上的数据,该数据库的 cron 作业已过期。

例如,我有一个表 (TableName),其中一列 (ExpDate) 为“2015-04-10 21:30:00”,它是时间戳格式类型和 UTC 时区。

我尝试过像这样创建一个 cron 作业命令:

*/5 * * * * delete * from TableName where ExpDate > NOW();

但它没有用,我在 SO 和其他地方搜索过,但没有找到直接的答案。所以,我提出了这个问题,希望有人能帮助我。我是 cron 工作的初学者,如果您能帮助我,我将不胜感激。

【问题讨论】:

  • 你需要你的 cron 来执行一个脚本,它会执行 mysql。

标签: mysql database crontab


【解决方案1】:

cron 不知道 sql 命令。 cron 知道运行可执行命令。这让我们找到了答案——您需要在 crontab 中直接调用 mysql 命令行客户端(可能是个坏主意),或者您需要编写一个脚本来执行您想要的操作,然后让 cron 执行它。

一个示例脚本是:

USERNAME=[username]
PASSWORD=[password]
DATABASE=[database]
MYSQL=/usr/bin/mysql

$MYSQL -u $USERNAME -p$PASSWORD $DATABASE -e "DELETE from ....."

您可以将此脚本放在安全的地方,因为它包含您的密码。假设您将其命名为 purge_expired.sh,您需要像 chmod +x purge_expired.sh 那样使其可执行,然后告诉 cron 执行该脚本,而不是试图让它自己运行 sql 命令。

编辑
不知何故,我错过了 mysql 拥有自己的事件调度程序的备忘录,你可能想改用它 - look here

一个特定于您的示例如下:

CREATE EVENT DeleteExpired
  ON SCHEDULE EVERY 5 MINUTE
  DO
    DELETE FROM TableName WHERE ExpDate < NOW();

您还需要确保 event_scheduler 变量设置为 on 才能运行。

【讨论】:

    猜你喜欢
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2019-01-11
    • 2013-03-27
    • 1970-01-01
    相关资源
    最近更新 更多