每隔n秒自动从数据库中删除过时的行

时间:2016-11-19 14:16:50

标签: mysql linux amazon-web-services

我有一个有时间戳列的数据库,我希望删除过时的数据。

所以我的想法是将一个MySQL查询写入.php文件,删除timestamp < current_timestamp - const的每一行。由于必须检查很多行,我将设置timestamp列的索引。

那么如何每隔n秒自动运行此脚本?我听说过Linux crontab - 我可以在我的网络服务器(而不是数据库服务器)上使用它来定期执行.php文件,这总体上是一种从数据库中删除过期行的好方法吗?

数据库在Amazon Web Services上的RDS实例上设置。我的网络服务器是EC2实例(也是亚马逊网络服务)。

3 个答案:

答案 0 :(得分:4)

做这样的事情需要设置一个事件或工作。这些努力使数据库非常繁忙。

我强烈建议采用不同的方法。使用视图访问所需的数据:

create view v_t as
    select t.*
    from t
    where timestamp > CURRENT_TIMESTAMP - ??;

然后使用此视图访问数据。

然后,定期,进入一个干净的表,以摆脱你不想要的行。您可以每天执行一次,每周一次,每小时一次 - 删除可能在数据库负载较轻时发生,因此不会影响用户。

答案 1 :(得分:2)

我认为您应该在AWS上查看lambda服务。 它允许您在没有运行其他实例的情况下针对AWS服务运行命令。

以下是有关如何设置的示例。 http://docs.aws.amazon.com/lambda/latest/dg/vpc-rds-deployment-pkg.html

祝你好运 尤金

答案 2 :(得分:0)

戈登·利诺夫(Gordon Linoff)的方法是理想的方法,但是如果您想使用计划作业的路线,则可以尝试使用MySQL Event Scheduler。以下示例每天运行一次,并删除超过一周的记录。

CREATE EVENT
  clean_my_table
ON SCHEDULE EVERY 1 DAY
DO
  DELETE FROM my_table
  WHERE time_stamp < date_sub(now(), INTERVAL 1 WEEK);

MySQL事件参考页面 https://dev.mysql.com/doc/refman/5.7/en/create-event.html