mysql 中定时任务event的创建

来源:互联网 发布:动态ppt软件 编辑:程序博客网 时间:2024/05/21 09:36
  以前一直使用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 ;

                从现在开始每隔九天定时执行:
                         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);

          
0 0
原创粉丝点击