当前位置:Gxlcms > mysql > mysql定时任务

mysql定时任务

时间:2021-07-01 10:21:17 帮助过:37人阅读

自 MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作。更得 一提的是MySQL的事件调度器可以精确到每秒钟执

自 MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作。更值得 一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精 确到每分钟执行一次。


1、查看是否开启定时任务:

SHOW VARIABLES LIKE 'event_scheduler';

2、开启定时任务://无需重启

SET GLOBAL event_scheduler = ON;

3、定义定时任务语法:

CREATE EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement;

-schedule说明:
AT TIMESTAMP [+ INTERVAL INTERVAL]
| EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]

INTERVAL:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

- on completion preserve 说明:
如在定义event的时候有指定ends,那么是否当到期的时候,
假如使用了on completion preserve,这样这个event还是存在的
但是使用on completion not preserve,这样event就自动删除了


4、实例:

1)从现在开始每隔九天定时执行

CREATE EVENT EVENT1

ON SCHEDULE EVERY 9 DAY STARTS NOW()

ON COMPLETION PRESERVE ENABLE

DO

BEGIN

CALL TOTAL();

END

2)每个月的一号凌晨1 点执行

CREATE EVENT EVENT2

ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 1 HOUR)

ON COMPLETION PRESERVE ENABLE

DO

BEGIN

CALL STAT();

END

3)每个季度一号的凌晨2点执行

CREATE EVENT TOTAL_SEASON_EVENT

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 2 HOUR)

ON COMPLETION PRESERVE ENABLE

DO

BEGIN

CALL SEASON_STAT();

END

4)每年1月1号凌晨四点执行

CREATE EVENT TOTAL_YEAR_EVENT

ON SCHEDULE EVERY 1 YEAR STARTS DATE_ADD(DATE(CONCAT(YEAR(CURDATE()) + 1,'-',1,'-',1)),INTERVAL 4 HOUR)

ON COMPLETION PRESERVE ENABLE

DO

BEGIN

CALL YEAR_STAT();

END


5)每秒插入一条数据

CREATETABLE aaa (timeline TIMESTAMP);
CREATE EVENT e_test_insert
ONSCHEDULE EVERY 1 SECOND
DO INSERT INTO test.aaa VALUES(CURRENT_TIMESTAMP);


注:MySQL的event在进行按月,季,年进行自动调用存储过程时,为了测试可以把系统改为年的最后一天,如2010-12-31 23:59:55;

这个Oracle的Job就会把月,季,年存储过程执行一遍。但MySQL改了系统时间了Event也没有定时执行。不知道各位大虾有没有什么好办法?可以解决这个问题。


5、查看定时任务:

select * from information_schema.EVENTS;

6、删除定时任务:(最好加上库名)
DROP EVENT IF EXISTS test.aaa_test;

人气教程排行