【问题标题】:Empty a MySQL table hourly每小时清空一个 MySQL 表
【发布时间】:2013-10-24 02:15:52
【问题描述】:

我有一个用 PHP Ajax 和 MySQL 编写的聊天脚本。它将消息记录在“usermsg”表中。

我的问题是我只有一个 100mb 的 MySQL 数据库,我无法保留所有消息,因为我有 55 个用户,我的数据库配额不足以存储所有内容,当它已满时,我的聊天会自动停止。 所以每次感觉快满的时候,我都会从 PhpMyAdmin 执行 truncat。 我想做的是以某种方式每小时执行一次 truncat,这样它就可以每小时清除我的表。

有人可以帮忙写一个 PHP 脚本或其他东西吗?谢谢。

【问题讨论】:

  • 有助于确保数据库设计正确,因此它占用尽可能少的空间。您可以发布表架构吗?
  • 您可以使用“cronjob”截断数据。

标签: php mysql


【解决方案1】:

我觉得每小时做一次忽略了一个更简单的选择。

另一种选择是在每次创建新条目时删除最旧的条目。这消除了对转储整个表的 cron 作业的需要,因为这可能会通过删除仅在片刻前创建的仍与聊天相关的条目来中断聊天。

因此,在您的“addMessage” sql 中,只需在提交新条目之前删除最旧的条目即可。

【讨论】:

    【解决方案2】:

    您可以为此使用事件调度程序。

    在 phpmyadmin 中运行以下查询。

    使用

    启用它
    SET GLOBAL EVENT_SCHEDULER = ON;
    

    并创建一个这样的事件

      CREATE EVENT delete_messages
    
        ON SCHEDULE EVERY 3 DAY
    
        DO
    
        TRUNCATE TABLE 'tableName';
    

    这是一个很好的教程。

    Phpmyadmin event scheduler

    【讨论】:

      【解决方案3】:

      使用 cronjobs 每小时执行一次 php 或使用 mysql 事件来完成此任务

      方法一:

      创建一个 php 并为其执行 cron 任务

      <?php
      // write database connection code
      mysqli_query("TRUNCATE TABLE tablename");
      ?>
      

      并在 cron 中调用这个 php

      php /path/to php file 
      

      方法二:

      创建 mysql EVENT。授予表的访问事件权限

      SET GLOBAL EVENT_SCHEDULER = ON;
      CREATE EVENT e_truncate
          ON SCHEDULE
            EVERY 1 HOUR
          DO
            TRUNCATE TABLE tablename
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-28
        • 1970-01-01
        • 2011-04-15
        • 2022-11-15
        • 2021-05-20
        • 2020-01-04
        相关资源
        最近更新 更多