1.Event 简介
MySQL的Event是在相应的时刻调用的过程式数据库对象,由MySQL的事件调度器(Event Scheduler)来管理。
事件取代了原先只能由操作系统的计划任务来执行的工作,而且MySQL的事件调度器可以精确到每秒钟执行一个任务。
2. 查看当前是否开启event scheduler
1 | i: show variables like '%event_scheduler%'; |
第一种:
第二种:
第三种:
3. 启动和关闭event scheduler方法
事件调度器由全局变量event_scheduler决定,它有三个可设定值:
- OFF
- ON
- DISABLED
OFF: 事件调度器是关闭的,调度线程没有运行,并且在show processlist中不显示,默认值是OFF。
ON: 事件调度器是开启的,并且执行所有的调度事件,通过show processlist可以查看Waiting for next activation的进程。
DISABLED: 设置此值表示Event Scheduler是被禁止的,无法在MySQL运行状态下改变其值。
注意:
在MySQL启动时如果在my.cnf设置了event_scheduler=ON|OFF|1|0时,就不能在运行时修改为DISABLED,如果设置event_scheduler=DISBALED时,就不能在运行时修改其值为ON|OFF|1|0。
启动Event:1
2
3
4SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = ON;
SET GLOBAL event_scheduler = 1;
SET @@hlobal.event_scheduler = 1;
关闭Event:1
2
3
4SET GLOBAL event_scheduler = OFF;
SET @@global.event_scheduler = OFF;
SET GLOBAL event_scheduler = 0;
SET @@global.event_scheduler = 0;
4. 创建Event
每个事件由两个主要部分组成,第一部分是事件调度(Event Scheduler),表示事件何时启动以及按什么频率启动,第二部分是事件动作(Event Action),是事件启动时执行的代码,事件动作可以是SQL语句、存储过程、begin…end语句块。
4.1 语法
1 | CREATE |
说明:
DEFINER默认是当前创建Event的用户,服务器在执行该事件时,使用该用户来检查权限。
ON SCHEDULE 用来指定事件执行的时间和频率。
[ON COMPLETION [NOT] PRESERVE] 设置事件执行完毕后是否自动drop该事件,ON COMPLETION PRESERVE则不会被drop掉。
AT timestamp 表示在给定的timestamp或者datetime的时间执行一次
INTERVAL interval 表示从AT timestamp多久之后执行
EVERY interval 重复执行时间粒度
[ENABLE|DISABLE] 设置该事件创建后状态是否开启或关闭,默认为ENABLE
4.2 例子
创建事件表events_list用来记录事件调度的名字和时间戳,然后创建Event每秒执行一次。
4.2.1 创建测试表
4.2.2 创建事件
查看事件执行结果:
5. 查看事件
show events;显示当前库中的事件。
6. 修改事件
通过alter event语句可以修改事件的定义和属性,可以使一个事件成为停止的或者再次让它活动,也可以修改一个事件的名字或者整个调度,然而当使用ON COMPLETION NOT PRESERVE属性定义的事件最后一次执行后,事件就会被删除,不能修改。
6.1 语法
1 |
|
比如: 修改上面创建的事件为每一分钟执行一次1
2
3alter event event_every_second on schedule
every 1 minute
do insert into events_list values('event_now', now());
修改事件为不再活动
1 | alter event event_every_second disable; |
7. 删除事件
语法:1
DROP EVENT [IF EXISTS] event_name
========================================================================
通过使用Event 机制可以完成一些数据库的定时操作,比如分区表的自动管理,将在分区表中进行介绍。
Reference:
https://blog.csdn.net/JesseYoung/article/details/35257527
<http://www.simlinux.com/2014/08/19/mysql-event-scheduler.html