检查有关配置:show variables like '%sche%';
1、开启配置
set global event_scheduler =1;
2、创建定时任务,每天执行1次(on completion preserve代表永久执行)
CREATE EVENT IF NOT EXISTS my_scheduler_task
ON SCHEDULE EVERY 1 DAY
on completion preserve
DO
update orders set statusFlag=2;
show create event my_scheduler_task
3、更改定时任务,5天执行1次
ALTER EVENT my_scheduler_task ON SCHEDULE EVERY 5 DAY;
4、开启事件
ALTER EVENT my_scheduler_task ENABLE;
5、关闭事件
ALTER EVENT my_scheduler_task DISABLE;
6、删除 事件
DROP EVENT IF EXISTS my_scheduler_task
如何设置执行的时间?
CREATE EVENT test_event ON SCHEDULE EVERY 1 DAY STARTS '2012-09-24 00:00:00' ON COMPLETION PRESERVE ENABLE DO CALL test_procedure();
EVERY 后面的是时间间隔,可以选 1 second,3 minute,5 hour,9 day,1 month,1 quarter(季度),1 year
如果需要每天指定时间运行任务,那就需要指定开始时间和频次,如下所示:
create event shopCartCleanerListener on schedule every 1 day starts '2015-01-01 00:00:00'on completion preserve enable do update shopCart set cart = null;
下面给几个实例:
从2013年1月13号0点开始,每天运行一次
ON SCHEDULE EVERY 1 DAY STARTS '2013-01-13 00:00:00'
从现在开始每隔九天定时执行:
ON SCHEDULE EVERY 9 DAY STARTS NOW() ;
每个月的一号凌晨1 点执行 :
on schedule every 1 month starts date_add(date_add(date_sub(curdate(),interval day(curdate())-1 day),interval 1 month),interval 1 hour);
每个季度一号的凌晨1点执行 :
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);
每年1月1号凌晨1点执行:
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);
查看所有事件:
SHOW EVENTS
查看指定事件的详情:
elect name,body,definer,execute_at,interval_value,interval_field,created,last_executed ,status from mysql.event;
其中body列就是其执行的内容。
临时修改事件计划:
可以用脚本来实现
mysql event_scheduler 开启event_scheduler sql指令: SET GLOBAL event_scheduler = ON; SET @@global.event_scheduler = ON; SET GLOBAL event_scheduler = 1; SET @@global.event_scheduler = 1; 相反,关闭event_scheduler指令: SET GLOBAL event_scheduler = OFF; SET @@global.event_scheduler = OFF; SET GLOBAL event_scheduler = 0; SET @@global.event_scheduler = 0;修改配置以使服务器重启后生效:
vi /etc/my.cnf
在[mysqld]下添加一行event_scheduler=ON