Cronjob还是MySQL事件?

时间:2013-02-11 04:07:37

标签: mysql cron mysql-event

我必须每小时更新一次我的MySQL数据库,我想知道使用cronjob VS MySQL事件的优点/缺点是什么?例如,哪个更快?哪个更安全?谢谢!

8 个答案:

答案 0 :(得分:18)

我总是去做一个cron工作,因为:

  • 这就是系统管理员期望它的地方(这一点不容小觑)
  • crobtab是防弹,经过时间考验,使用极为广泛且易于理解
  • 您可以随意指导/分析您想要的错误/成功消息
  • 有些数据库任务需要/更喜欢mysql离线(例如完全备份),所以你必须使用cron来做这些 - 用cron完成一些任务是很糟糕的,有些是用mysql完成的;你不确定在哪里看
  • 如果你有一个shell脚本
  • ,你可以链接其他应该遵循的事件

最后,仅仅因为你可以做某事,并不意味着这是个好主意。 Mysql擅长数据。不要将它用于“外壳”的东西。

答案 1 :(得分:18)

MySQL事件调度程序 - cron的一个很好的替代品。

我们都知道cron,这是一种安排某些进程的简单方法,比如每周在MySQL数据库中截断日志表。

借助MySQL 5.1,MySQL的人们引入了一个很酷的功能:MySQL事件调度程序!

使用事件计划程序,您可以计划要在数据库上执行的任务。 这对于无法在其网站空间上创建cron作业的Web开发人员来说非常有用,因为他们的主机不会让他们这么做! 它确实是cron的绝佳替代品!

一些例子:

您希望每周截断您的应用程序日志表,这就是您的事件日程表的样子:

CREATE EVENT PurgeLogTable
ON SCHEDULE EVERY 1 WEEK
DO
BEGIN
DELETE FROM `logs` WHERE `LogTime` <= DATE_SUB(CURRENT_TIMESTAMP,INTERVAL 1 WEEK);
INSERT INTO `audit` (`AuditDate`, `Message`) VALUES(NOW(), "Log table purged succesfully!");
END

答案 2 :(得分:8)

Mysql引入了我们可以使用替代Cronjob的事件调度程序。与cronjob相比有许多优点:

1)它直接写在Mysql Server上。

2)这与平台无关。您的申请可能以任何不重要的语言撰写。你只需要知道mysql。

3)只要在规则间隔内需要数据库更新或清理,我们就可以使用它们。

4)每次都不需要编译查询,因此性能会提高。

5)错误可以登录日志文件。 语法:

DELIMITER //
CREATE EVENT eventName
ON SCHEDULE EVERY 1 WEEK
STARTS 'Some Date to start'
ENDS 'End date If any' 

DO
BEGIN
   // Your query will be here
END//
DELIMITER ;

有关详情,请访问官方网站:http://dev.mysql.com/doc/refman/5.1/en/create-event.html

详细博客:http://goo.gl/6Hzjvg

答案 3 :(得分:0)

Mysql事件调度程序对共享主机环境有利。在时间方面,它也可以安排到第二个。与cron不同,它只是分钟 - 但你可以解决这个限制。

答案 4 :(得分:0)

请检查以下代码:

if ($product_info) {
   if ($product_info['image']) {
        $image = $this->model_tool_image->resize($product_info['image'], $this->config->get($this->config->get('config_theme') . '_image_wishlist_width'), $this->config->get($this->config->get('config_theme') . '_image_wishlist_height'));
    }
    else {
        $image = false;
    }
}

答案 5 :(得分:0)

我现在正在与EVENT合作并思考相同的问题:)

除上述答案外:

  • 如果任务纯粹以数据为中心,则使用EVENT,或补充已构建到数据库中的功能。您可能已经拥有清理数据,记录某些事件,聚合某些数据等的触发器。如果您要执行的计划任务是现有设计的一部分,那么从EVENT触发任务会更具凝聚力。毕竟,EVENT是时间触发器

  • 如果从shell运行脚本,则需要在shell脚本或默认文件中存储用户名/密码。为了执行EVENT,您在创建EVENT后不需要用户名/密码。

  • IMCO你应该在存储过程中编写逻辑;然后从EVENT或shell脚本调用该过程,无论您最喜欢什么。您甚至可以在UI中构建一些位置,使用户可以手动调用该过程。

答案 6 :(得分:0)

这是一个很长的问题,但是我想使用mysql事件的一个优点是它直接嵌入dbms中,因此,例如,如果您使用php作为主要语言,则无需创建/维护连接还应考虑以下原因,您可以消除在能够运行语句之前创建与数据库的连接时进行验证的必要性,并且还可以使用可以执行维护脚本并将角色分配给该应用程序的用户角色来创建事件这样做不会给您带来安全性,您知道只有具有这种角色的用户才能访问,因此决定使用事件还是cron作业取决于您使用的系统。但是要注意的另一件事是同一事件的多次触发,特别是如果间隔仅相差仅几秒钟,例如每5-10秒等。

答案 7 :(得分:0)

过去几个小时我刚刚阅读了 Event Scheduler 文档,我刚刚使用它创建了一个应该每天重复发生的事件。

实际上我对它非常满意,我认为与 Cronjob 相比,它是一个更好的选择,至少因为您不需要使用外部脚本。

在性能方面,我敢打赌这是一个更好的选择。