MySQL任务调度

来源:互联网 发布:数据挖掘 十大算法 bp 编辑:程序博客网 时间:2024/05/22 09:39

MySQL 5.1 引入的时间调度器可以作为定时任务调度器,取代系统的cron调度,调度时间可以精确到秒,实时性好。

开启事件调度器

首先查看是否开启了事件调度器: show variables like "event_scheduler"; 或 SELECT @@event_scheduler;

开启事件调度器: SET GLOBAL event_scheduler = ON;,这个命令需要具有 SUPER 权限才能执行,可以用 root 用户来执行,说明是作用在整个数据库服务上的,而不单是某个数据库实例。

查看事件的执行情况

SELECT * FROM information_schema.EVENTS;

创建事件

语法:

  CREATE  EVENT  [IF  NOT EXISTS]  event_name     ON  SCHEDULE  schedule     [ON  COMPLETION  [NOT]  PRESERVE]     -- 执行完后是否保留事件,默认为NOT PRESERVE,也就是非周期性任务执行完后删除。     [ENABLE  |  DISABLE]                 -- 开启或关闭事件     [COMMENT  'comment']                 --  事件说明     DO   sql_statement;                  --  要执行的 sql 语句schedule:     AT  TIMESTAMP  [+INTERVAL  INTERVAL_VAL]--  AT  用于在指定时间点执行一次。     EVERY  INTERVAL  [STARTS  TIMESTAMP]  [END  TIMESTAMP]--  EVERY  用于每隔指定的时间重复执行。--  如果没有指定开始时间和结束时间,那么默认的开始时间就是当前结束时间,没有结束时间。INTERVAL_VAL:quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND} --   quantity 是数值,花括号里的是的时间单位。

修改事件

  ALTER EVENT event_name     [ON SCHEDULE schedule]            --  设定调度时间     [RENAME TO new_event_name]        --  重命名为另一个名字     [ON COMPLETION [NOT] PRESERVE]    -- 执行完后是否保留事件,默认不保留     [COMMENT 'comment']               --  事件说明     [ENABLE | DISABLE]                -- 开启或关闭事件     [DO sql_statement]                --  要执行的 sql 语句

删除事件

  DROP   EVENT  eventName;DROP   EVENT  IF  EXISTS  eventName;

代码示例

  --  创建一个测试表CREATE  TABLE aaa  (timeline  TIMESTAMP)--  每隔一秒钟插入一条记录,这里没有指定时间范围,就从当前时间开始一直重复调度。CREATE  EVENT  e_test     ON  SCHEDULE  EVERY  1  SECOND     DO  INSERT  INTO  aaa  VALUES(CURRENT_TIMESTAMP);--   创建事件但不调度执行CREATE  EVENT  e_test     ON  SCHEDULE  EVERY  1  SECOND     DISABLE     COMMENT  'not enabled, just for later use .'     DO  INSERT  INTO  aaa  VALUES(CURRENT_TIMESTAMP);--   修改事件的调度间隔,并使能被调度。ALTER  EVENT  e_test     ON  SCHEDULE  EVERY  10  SECOND     ENABLE;--   在指定时间点执行一次CREATE  EVENT  e_test     ON  SCHEDULE  AT  TIMESTAMP  '2014-01-27 23:59:50'     DO  TRUNCATE  TABLE  aaa;--   在指定时间点执行一次,执行完后保留事件。CREATE  EVENT  e_test     ON  SCHEDULE  AT  TIMESTAMP  '2014-01-27 23:59:50'     ON  COMPLETION   PRESERVE     DO  TRUNCATE  TABLE  aaa;--  从某个时间范围内周期性地执行任务CREATE  EVENT  e_test     ON  SCHEDULE  EVERY  1  DAY     STARTS  TIMESTAMP  '2014-01-27 23:59:50'     ENDS  TIMESTAMP  '2014-02-27 23:59:50'     DO  TRUNCATE  TABLE  aaa;--   删除事件DROP   EVENT  e_test;--   如果存在,删除事件。DROP   EVENT  IF  EXISTS  e_test;
原创粉丝点击