我想自动删除mysql数据库上的数据,该数据库每5分钟就有一个cron作业过期日期。
例如,我有一个表(TableName),其中一列(ExpDate)为“2015-04-10 21:30:00
”,它是时间戳格式类型和UTC时区。
我尝试过创建一个这样的cron作业命令:
*/5 * * * * delete * from TableName where ExpDate > NOW();
但它不起作用,我在SO和其他地方搜索过,但没有找到直接答案。所以,我创建了这个问题,并希望有人可以帮助我。我是cron工作的初学者,如果你能帮助我,我将非常感激。
答案 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才能运行。