Event Scheduler是mysql新出的一个事件,他查一个计划任务类的功能,我们可以通过在mysql中创建event来定时执行一些sql语句,这个我们就完全不需要像以前一样来利用系统的计划任务来执行定时任务了.
1.开启
全局变量event_scheduler用来设定是否服务器端运行执行计划任务,该变量有如下三种值:
OFF:计划任务处于停止状态,event scheduler线程没有运行,是event_scheduler的默认值,执行一下任意一条命令关闭,代码如下:
- SET GLOBAL event_scheduler = OFF;
- SET @@global.event_scheduler = OFF;
- SET GLOBAL event_scheduler = 0;
- SET @@global.event_scheduler = 0;
ON:计划任务处于运行状态,event scheduler线程启动,并执行所有的计划任务,执行一下任意一条命令开启,代码如下:
- SET GLOBAL event_scheduler = ON;
- SET @@global.event_scheduler = ON;
- SET GLOBAL event_scheduler = 1;
- SET @@global.event_scheduler = 1;
DISABLED:该值将致使计划任务不可运行,运行MySql服务时候加上参数,代码如下:
--event-scheduler=DISABLED
或者在my.cnf 中设置,查看源代码打印帮助.
1 event_scheduler=DISABLED
MySQL的Event Scheduler是根据预先安排的计划进行数据库操作的数据库对象,可以看作是一种“时间触发器”。Event实际上是被一个特殊的event scheduler线程执行的,假如它正在运行的话,可以通过SHOW PROCESSLIST命令看到它。
2.创建
创建的基本语法是,代码如下:
- CREATE EVENT (1)
- [IF NOT EXISTS] (2)
- event_name (3)
- ON SCHEDULE schedule (4)
- [ON COMPLETION [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表中插入时间戳,代码如下:
CREATE EVENT e_store_ts ON SCHEDULE EVERY 10 SECOND DO INSERT INTO myschema.mytable VALUES (UNIX_TIMESTAMP());
2.在2008-02-06 23:59:00开始的一年内,每隔1小时就删除掉messages表的早先的10条记录,代码如下:
- CREATE EVENT e_hourly
- ON SCHEDULE
- EVERY 1 HOUR STARTS ’2007-02-10 23:59:00′ ENDS ’2008-02-10 23:59:00′ --Vevb.com
- DO
- DELETE FROM messages limit 10;
4.查看EVENT,代码如下:
- mysql>SELECT * FROM INFORMATION_SCHEMA.EVENTS
- > WHERE EVENT_NAME='e_store_ts'
- > AND EVENT_SCHEMA='myschema'G
- *************************** 1. row ***************************
- EVENT_CATALOG: NULL
- EVENT_SCHEMA: myschema
- EVENT_NAME: e_store_ts
- DEFINER: jon@ghidora
- EVENT_BODY: SQL
- EVENT_DEFINITION: INSERT INTO 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: NOT PRESERVE
- CREATED: 2006-02-09 22:36:06
- LAST_ALTERED: 2006-02-09 22:36:06
- LAST_EXECUTED: NULL
- EVENT_COMMENT:
- 1 row in set (0.00 sec)
5.删除EVENT,代码如下:
- DELETE FROM mysql.event
- WHERE db = 'myschema'
- AND definer = 'jon@ghidora'
- AND name = 'e_insert';
新闻热点
疑难解答