mysql 中定时任务event的创建
2016-02-18 16:26
603 查看
以前一直使用quartz创建定时任务,但是有时候定时任务一多,总感觉在某个时间段内集中进行定时任务会对tomcat造成比较大的压力(对不起,这是我猜的。。。),所以后来就发现mysql 在5.1之后新增了事件调度器(Event Scheduler)。而且如果是定时调用一个存储过程,会比使用quartz简单的多。
①查看event是否开启:
如果是OFF,则代表关闭。
开启事件调度的方法:
func1.执行:SET GLOBAL event_scheduler = 1 ;
或:SET GLOBAL event_scheduler = ON ;
func2.在my.cnf中(windows环境下是my.ini)修改[mysqld]下的配置:--event_scheduler=1。
②创建事件:
语法:
CREATE EVENT [IF NOT EXIST] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMNET 'comment']
DO sql_statement ;
[ON COMPLETION [NOT] PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOT PRESERVE。
其中语法中的'schedule'代表的是要定时执行的时间
schedule:
AT TIMESTAMP [+INTERVAL INTERVAL]
| EVERY INTERVAL [STARTS TIMESTAMP] [END 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}
DO后边的语句是要执行的任务,可以是一个sql语句,也可以是存储过程等。
③查看意创建的定时任务:(此时需要root授权)
func1:SELECT * FROM mysql.event ;
func2:SHOW EVENTS ;
func3:SHOW CREATE EVENT event_nam;此时可查看详细的任务内容,如:SHOW CREATE EVENT e_cancel_foodorder ;
④开启定时任务:
ALTER EVENT e_cancel_foodorder ON COMPLETION
PRESERVE ENABLE ;
⑤关闭定时任务:
ALTER EVENT e_cancel_foodorder ON COMPLETION
PRESERVE DISABLE ;(如果将此event执行了关闭后,重启mysql会删除掉该定时任务)
⑥修改定时任务:
ALTER EVENT e_cancel_foodorder ON SCHEDULE EVERY 5 DAY ;(将每天执行修改为5天执行一次)
⑦删除定时任务:
DROP EVENT [IF EXISTS] event_name ;
⑧创建定时任务的示例:
每分钟执行一次:
CREATE EVENT `e_cancel_foodorder`
ON SCHEDULE EVERY 1 MINUTE
DO UPDATE food_order set status=8 WHERE status=2 AND TIMESTAMPDIFF(MINUTE,time2,NOW())>10 ;
EVERY 后面的是时间间隔,可以选 1 second,3 minute,5 hour,9 day,1
month,1 quarter(季度),1 year
每天0点1分定点执行:
CREATE EVENT `e_cancel_foodorder`
ON SCHEDULE EVERY 1 DAY
STARTS '2015-12-29 00:01:00'
DO UPDATE food_order set status=8 WHERE status=2 AND TIMESTAMPDIFF(MINUTE,time2,NOW())>10 ;
①查看event是否开启:
如果是OFF,则代表关闭。
开启事件调度的方法:
func1.执行:SET GLOBAL event_scheduler = 1 ;
或:SET GLOBAL event_scheduler = ON ;
func2.在my.cnf中(windows环境下是my.ini)修改[mysqld]下的配置:--event_scheduler=1。
②创建事件:
语法:
CREATE EVENT [IF NOT EXIST] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMNET 'comment']
DO sql_statement ;
[ON COMPLETION [NOT] PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOT PRESERVE。
其中语法中的'schedule'代表的是要定时执行的时间
schedule:
AT TIMESTAMP [+INTERVAL INTERVAL]
| EVERY INTERVAL [STARTS TIMESTAMP] [END 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}
DO后边的语句是要执行的任务,可以是一个sql语句,也可以是存储过程等。
③查看意创建的定时任务:(此时需要root授权)
func1:SELECT * FROM mysql.event ;
func2:SHOW EVENTS ;
func3:SHOW CREATE EVENT event_nam;此时可查看详细的任务内容,如:SHOW CREATE EVENT e_cancel_foodorder ;
④开启定时任务:
ALTER EVENT e_cancel_foodorder ON COMPLETION
PRESERVE ENABLE ;
⑤关闭定时任务:
ALTER EVENT e_cancel_foodorder ON COMPLETION
PRESERVE DISABLE ;(如果将此event执行了关闭后,重启mysql会删除掉该定时任务)
⑥修改定时任务:
ALTER EVENT e_cancel_foodorder ON SCHEDULE EVERY 5 DAY ;(将每天执行修改为5天执行一次)
⑦删除定时任务:
DROP EVENT [IF EXISTS] event_name ;
⑧创建定时任务的示例:
每分钟执行一次:
CREATE EVENT `e_cancel_foodorder`
ON SCHEDULE EVERY 1 MINUTE
DO UPDATE food_order set status=8 WHERE status=2 AND TIMESTAMPDIFF(MINUTE,time2,NOW())>10 ;
EVERY 后面的是时间间隔,可以选 1 second,3 minute,5 hour,9 day,1
month,1 quarter(季度),1 year
每天0点1分定点执行:
CREATE EVENT `e_cancel_foodorder`
ON SCHEDULE EVERY 1 DAY
STARTS '2015-12-29 00:01:00'
DO UPDATE food_order set status=8 WHERE status=2 AND TIMESTAMPDIFF(MINUTE,time2,NOW())>10 ;
从现在开始每隔九天定时执行:
ONSCHEDULE 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);
相关文章推荐
- MySQL性能优化的最佳20+条经验
- mysql 索引的建立
- MySQL与unix时间问题
- mysql数据库
- MySQL INNER JOIN
- Mysql数据类型浅析
- Mysql 主从复制配置
- MySql海量数据批量插入优化小结
- 浅析 MySQL (find_in_set )
- mysql5.5慢日志设置和查询
- mysql新建表和修改字段例子
- MySQL数据库的优化
- mysql取出表中,某字段值最大的一条纪录,sql语句
- MySQL: InnoDB 还是 MyISAM?
- mysql-存储过程
- mysql 5.5 安装图解(附安装到最后停住的解决方法)
- msyql 字段说明
- mysql--索引的限制
- Mysql 在 mybatis 环境下 批量新增 并 将已存在的数据更新
- 浅析Mysql Where条件