mysql定时任务 Event Scheduler用法详解
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.创建
创建的基本语法是:
代码如下 | |
1 CREATE EVENT (1) 2 [IF NOT EXISTS] (2) 3 event_name (3) 4 ON SCHEDULE schedule (4) 5 [ON COMPLETION [NOT] PRESERVE] (5) 6 [ENABLE | DISABLE] (6) 7 [COMMENT 'comment'] (7) 8 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条记录:
代码如下 | |
ON SCHEDULE EVERY 1 HOUR STARTS ’2007-02-10 23:59:00′ ENDS ’2008-02-10 23:59:00′ DO DELETE FROM messages limit 10; |
4.查看EVENT
代码如下 | |
mysql>SELECT * FROM INFORMATION_SCHEMA.EVENTS |
5.删除EVENT
代码如下 | |
DELETE FROM mysql.event |