我必须每小时更新一次 MySQL 数据库,我想知道使用 cronjob VS MySQL 事件的优点/缺点是什么?例如,哪个更快?哪个更安全?谢谢!
8 回答
我总是会去做 cron 工作,因为:
- 这就是系统管理员所期望的(这一点不容小觑)
- crontab 是防弹的、经过时间考验的、被广泛使用和理解的
- 您可以自由地在您想要的地方直接/分析错误/成功消息
- 一些数据库任务需要/更喜欢 mysql 离线(例如完全备份),所以你必须使用 cron 来完成这些任务 - 使用 cron 完成一些任务而使用 mysql 完成一些任务是个坏主意;你会不确定在哪里看
- 如果你有一个 shell 脚本,你可以链接其他应该遵循的事件
最后,仅仅因为你可以做某事,并不意味着这是一个好主意。Mysql擅长数据的东西。不要将它用于“外壳”的东西。
MySQL Event Scheduler – 一个很好的 cron 替代品。
我们都知道 cron,这是一种安排某些进程的简单方法,例如每周截断 MySQL 数据库中的日志表。
在 MySQL 5.1 中,MySQL 的人引入了一个很酷的新特性:MySQL 事件调度器!
使用 Event Scheduler,您可以安排要在数据库上执行的任务。这对于无法在其网站空间上创建 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
Mysql 引入了 Event scheduler,我们可以使用它来替代 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
我将使用 mysql 事件计划
因为我们不必为它编写一个额外的文件,我们的目的可以通过编写一个查询来实现。
如果只需要数据库相关操作,那么 mysql 事件调度是不错的选择。
Mysql 事件调度程序对于共享主机环境具有优势。在时间上,也可以排到秒。与 cron 不同,它是按分钟计算的 - 但是您可以解决这个限制。
我自己现在正在与 EVENTs 合作并思考同样的问题:)
除了以上答案:
如果任务纯粹以数据为中心,或者补充已经构建到数据库中的功能,请使用 EVENT。您可能已经有清理数据、记录某些事件、聚合某些数据等的触发器。如果您要执行的计划任务是现有设计的一部分,那么从 EVENT 触发任务更具凝聚力。毕竟,事件是时间触发器。
如果从 shell 运行脚本,则需要将用户名/密码存储在 shell 脚本或默认文件中。要执行 EVENT,创建 EVENT 后不需要用户名/密码。
IMCO,您应该在存储过程中编写逻辑;然后从 EVENT 或从 shell 脚本调用该过程,无论哪种方式最适合您。您甚至可以在您的 UI 中构建一些地方,使用户能够手动调用该过程。
这是一个由来已久的问题,但我想使用 mysql 事件的一个优点是它直接嵌入在 dbms 中,因此它不需要创建/维护连接,例如,如果您使用 php 作为主要语言,您也可以考虑这个原因是您在能够运行语句之前消除了在创建与数据库的连接时进行验证的必要性,并且您可以使用可以执行维护脚本的角色创建事件并将用户角色分配给不这样做的应用程序将为您提供安全性,您知道用户只有这种角色才能访问,因此决定是使用事件还是 cron 作业取决于您所使用的系统。但是要注意的另一件事是同一事件的多次触发,特别是如果间隔只是一个差异,就像每 5-10 秒等一样,只是几秒钟的问题。
我刚刚花了几个小时阅读 Event Scheduler 文档,我刚刚用它来创建一个应该每天重复的事件。
我实际上对它非常满意,并且我认为与 Cronjob 相比,它是一个更好的选择,至少因为您不需要使用外部脚本。
在性能方面,我敢打赌,这是一个更好的选择。