MySQL event

MySQL事件调度器(Event Scheduler)类似于Oracle的scheduled job,可以在某一个时间点或者或者每隔固定间隔重复执行执行SQL语句、存储过程或过程体(BEGIN … END)。

1. 启动event调度器

默认情况下,event scheduler是处于off状态的,可以通过全局参数event_scheduler来动态启动:

这时event_scheduler 线程已经运行。同理,关闭的方法可以使用:
SET GLOBAL event_scheduler = OFF;
SET @@global.event_scheduler = OFF;
SET GLOBAL event_scheduler = 0;
SET @@global.e_scheduler = 0;
此外event_scheduler 参数还有一个启动选项DISABLED,如果mysqld的启动参数中包含了event_scheduler =DISABLED,则动态启动会失效。
当mysqld以--skip-grant-tables;选项启动时会导致 event_scheduler 设为DISABLED(因为event的执行依赖对定义者DEFINEER操作对象的验证);

2. 创建事件

事件的创建、修改、删除需要event权限。通过grant语句可以将某一个数据库(或者所有数据库)的event权限赋予某一用户,event权限属于数据库级别。如:
GRANT EVENT ON db.* TO main@localhost;
另外,event的定义者(默认为创建者)需要有操作的表的权限。否则在执行的时候会失败。
CREATE EVENT的语法格式如下:

event name最长为64个字符,所以名称最好能描述清楚event的功能。简单的几个实例(参考3):
每1分钟插入一个时间戳:

1天后清空test表:

或者直接指定时间点:

5天后开始,1个月后停止每天定时清空表:

创建语句在DO之前指定DISABLE会导致该event处于disabled的状态(默认为enable),DISABLE ON SLAVE则指定该event不对从库生效。
当event执行的是一个过程体时,直接在DO后指定DO BEGIN ... END即可。
当event执行的是一个存储过程时,则在DO CALL 后执行存储过程的名称,例如 DO CALL st_proc(1, 'by_event')

3. 修改事件(ALTER EVENT)

关闭/打开事件

改变事件的调度

4. 删除事件(DROP EVENT)

5. 查看事件

INFORMATION_SCHEMA中的EVENT表可以查到已定义的event,详细请查看文档The INFORMATION_SCHEMA EVENTS Tab

^^

参考:
http://dev.mysql.com/doc/refman/5.6/en/events-configuration.html Event Scheduler Configuration
http://blog.csdn.net/lxgwm2008/article/details/9088521 mysql之event
http://www.cnblogs.com/c840136/articles/2388512.html MySQL计划任务(事件调度器)(Event Scheduler)

show grants for root@’localhost';
GRANT ON
-> TO [IDENTIFIED BY “ “]
-> [WITH GRANT OPTION];

Posted in Database, MySQL.