如何使用cron作业删除过期数据

时间:2015-04-11 10:42:20

标签: mysql database crontab

我想自动删除mysql数据库上的数据,该数据库每5分钟就有一个cron作业过期日期。

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

示例脚本将是:

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才能运行。