MySql 定时任务 Event Scheduler

在MySql 5.1的版本以后支持定时任务 Event Scheduler,有点类似于Linux 的contab,可以创建 Event 来定时执行MySql的语句,具体的文档详见MySql的官方文档http://dev.mysql.com/doc/refman/5.1/en/events-privileges.html。

1.开启

全局变量event_scheduler用来设定是否服务器端运行执行计划任务,该变量有如下三种值:
OFF:计划任务处于停止状态,event scheduler线程没有运行。是event_scheduler的默认值(执行一下任意一条命令关闭);

SETGLOBAL event_scheduler = OFF;

SET@@global.event_scheduler = OFF;

SETGLOBAL event_scheduler = 0;

SET@@global.event_scheduler = 0;


ON:计划任务处于运行状态,event scheduler线程启动,并执行所有的计划任务(执行一下任意一条命令开启);

SETGLOBAL event_scheduler = ON;

SET@@global.event_scheduler = ON;
3
SETGLOBAL event_scheduler = 1;
4
SET@@global.event_scheduler = 1;



DISABLED:该值将致使计划任务不可运行

运行MySql服务时候加上参数

event-scheduler=DISABLED

或者在my.cnf 中设置

event_scheduler=DISABLED


MySQL的Event Scheduler是根据预先安排的计划进行数据库操作的数据库对象,可以看作是一种“时间触发器”。Event实际上是被一个特殊的event scheduler线程执行的,假如它正在运行的话,可以通过SHOW PROCESSLIST命令看到它。

2.创建

创建的基本语法是:

CREATEEVENT        (1)

[IFNOTEXISTS]        (2)

event_name         (3)

ONSCHEDULE schedule      (4)

[ONCOMPLETION [NOT] PRESERVE]   (5)

[ENABLE | DISABLE]       (6)

[COMMENT'comment']       (7)

DO sql_statement        (8)


逐条介绍:
(1) 创建Event嘛,这俩关键字当然不能少了
(2) 如果不存在同名的数据库对象才创建
(3) 计划任务的名字。作为数据库对象,都有一个本库内唯一的名字做标识
(4) 计划任务的计划,重点就在这儿。有两个关键字来设定任务的执行计划:AT和EVERY:
AT指定的是一个一次性计划,后面跟着一个时间戳,后续的sql语句将在指定的时间被执行一次;
EVERY指定的是一个周期性计划,在该子句中可以指定从某时间点到某时间点期间,每隔某周期就执行一次该任务。
(5) 任务整个执行完毕后,该计划任务对象是否还在数据库中保留。默认不保留
(6) 有效或失效。默认有效
(7) 真正要执行的语句

3.示例

1.每10秒钟向myschema.mytable表中插入时间戳:

CREATEEVENT e_store_ts ONSCHEDULE EVERY 10 SECONDDO INSERTINTO myschema.mytable VALUES(UNIX_TIMESTAMP());


2.在2008-02-06 23:59:00开始的一年内,每隔1小时就删除掉messages表的早先的10条记录:

CREATEEVENT e_hourly

          ONSCHEDULE

          EVERY 1 HOURSTARTS ’2007-02-10 23:59:00′ ENDS ’2008-02-10 23:59:00′

          DO

          DELETEFROM messages limit 10;


4.查看EVENT

mysql>SELECT* FROMINFORMATION_SCHEMA.EVENTS

     >  WHEREEVENT_NAME='e_store_ts'

     >  ANDEVENT_SCHEMA='myschema'\G

*************************** 1. row ***************************

   EVENT_CATALOG:NULL

    EVENT_SCHEMA: myschema

      EVENT_NAME: e_store_ts

         DEFINER: jon@ghidora

      EVENT_BODY: SQL

EVENT_DEFINITION:INSERTINTO myschema.mytable VALUES(UNIX_TIMESTAMP())

      EVENT_TYPE: RECURRING

      EXECUTE_AT:NULL

  INTERVAL_VALUE: 5

  INTERVAL_FIELD:SECOND

        SQL_MODE:NULL

          STARTS: 0000-00-00 00:00:00

            ENDS: 0000-00-00 00:00:00

          STATUS: ENABLED

   ON_COMPLETION:NOTPRESERVE

         CREATED: 2006-02-09 22:36:06

    LAST_ALTERED: 2006-02-09 22:36:06

   LAST_EXECUTED:NULL

   EVENT_COMMENT:

1 row inset (0.00 sec)


5.删除EVENT

DELETE FROM mysql.event
    WHERE db = 'myschema'
      AND definer = 'jon@ghidora'
      AND name = 'e_insert';


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值