工作中常存在一些固定任务,需要周期性执行。
有些需要在服务中,也有一些完全存在于数据层面。
对于数据层面的任务,可以借助定时器,而不需要在服务中执行。
这里介绍的是MySQL数据库的定时器。
首先查看定时器功能是否开启
SHOW VARIABLES LIKE 'event_scheduler';
结果集中,OFF表示关闭 , ON表示开启。
若为OFF,则需要开启该功能:
SET GLOBAL event_scheduler = 'ON';
或
SET GLOBAL event_scheduler = 1;
此处注意,需要 root 用户权限才能执行。
使用这种方式,若MySQL服务后续重启(虽然通常很少重启,但也会有的),定时器功能依然会恢复关闭。
可以通过修改配置文件的方式,调整定时器默认开关。
方法也比较简单,找到mysql根目录下 my.ini 文件,打开并在 [mysqld] 标记下方添加:
event_scheduler = ON
创建定时器:
CREATE EVENT [EVENT_NAME] ON SCHEDULE EVERY 1 QUARTER STARTS DATE_ADD(
DATE_ADD(DATE(CONCAT(YEAR(CURDATE()), '-', ELT(QUARTER(CURDATE()), 1, 4, 7, 10), '-', 1)), INTERVAL 1 QUARTER),
INTERVAL 1 HOUR) ON COMPLETION PRESERVE DO CALL PROCEDURE_NAME();
该定时器设置为每个季度第一天的凌晨一点,执行 PROCEDURE_NAME() 任务。
有几个关键点需要注意:
BEGIN
DROP TABLE TEST_TABLE;
CALL PROCEDURE_NAME();
END