打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Mysql事件调度器(Event Scheduler)
Mysql中的事件调度器Event Scheduler类似于linux下的crontab计划任务的功能,它是由一个特殊的时间调度线程执行的
一、查看当前是否开启了event scheduler三种方法:

1) SHOW VARIABLES LIKE ‘event_scheduler’;
2) SELECT @@event_scheduler;
3) SHOW PROCESSLIST;(是否有State为:Waiting for next activation的进程,User为event_scheduler)

二、启动关闭event scheduler方法:

时间调度器是否开启由全局变量event_scheduler决定,它有三个可以设定的值: – OFF : 事件调度器是关闭的,调度线程并没有运行,并且在SHOW PROCESSLIST中不显示,默认值是OFF – ON :事件调度器是开启的,调度线程并没有运行,并且执行所有的调度事件,通过SHOW PROCESSLIST可以查看Waiting for next activation的进程 – DISABLED : 设定这个值表示Event Scheduler是被禁止的,无法在Mysql运行状态下改变其值

注:在Mysql启动时如果在my.cnf设置了event_scheduler=ON(OFF or 1 or 0)时,就不能在运行时修改撑DISABLED,如果设置event_scheduler=DISABLED时,就不能在运行时修改其值为ON ( OFF or 1 or 0)

mysql> SELECT @@event_scheduler;+-------------------+| @@event_scheduler |+-------------------+| DISABLED |+-------------------+1 row in set (0.00 sec)mysql> SET @@global.event_scheduler = 1;ERROR 1290 (HY000): The MySQL server is running with the --event-scheduler=DISABLED or --skip-grant-tables option so it cannot execute this statement在mysql运行时开启Event(4种方法均可):SET GLOBAL event_scheduler = ON;SET @@global.event_scheduler = ON;SET GLOBAL event_scheduler = 1;SET @@global.event_scheduler = 1;在mysql运行时关闭Event(4种方法均可):SET GLOBAL event_scheduler = OFF;SET @@global.event_scheduler = OFF;SET GLOBAL event_scheduler = 0;SET @@global.event_scheduler = 0;
三、创建Event:
语法:CREATE    [DEFINER = { user | CURRENT_USER }]    EVENT    [IF NOT EXISTS]    event_name    ON SCHEDULE schedule    [ON COMPLETION [NOT] PRESERVE]    [ENABLE | DISABLE | DISABLE ON SLAVE]    [COMMENT 'comment']    DO event_body;schedule:    AT timestamp [+ INTERVAL interval] ...  | EVERY interval    [STARTS timestamp [+ INTERVAL interval] ...]    [ENDS timestamp [+ INTERVAL interval] ...]interval:    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |             WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |             DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

说明:

DEFINER默认是CREATE EVENT的用户,可以理解为DEFINER=CURRENT_USER,指该event的用户,服务器在执行该事件时,使用该用户来检查权限;如果设置语法:‘user_name’@‘host_name’,如果当前CREATE EVENT用户没有supser权限,则无法将该event指派给其他用户;如果有super权限,则可以指定任意存在的用户,若不存在,时间执行时报错
IF NOT EXISTS : 如果在同一个schema创建一个已经存在的event_name时不会做任何操作,也不会出错,但会出现warings:该event已经存在;如果不增加此关键词已经存在的话提示ERROR: 1537 (HY000): Event ‘countsum’ already exists
ON SCHEDULE :用于设置什么时间执行,执行的频率及执行多久的问题
AT timestamp :表示在给定的datetime或者timestamp的时间执行一次
+ INTERVAL interval:表示从AT timestamp多久之后执行
EVERY interval :有规律的重复执行
[ENABLE | DISABLE]可是设置该事件创建后状态是否开启或关闭,默认为ENABLE
[COMMENT ‘comment’]可以给该事件加上注释。

event创建时间的32天后:AT  CURRENT_TIMESTAMP + INTERVAL 3 WEEK + INTERVAL 2 DAY2分钟10秒:+ INTERVAL '2:10' MINUTE_SECOND每6周:EVERY 6 WEEK从现在开始30分钟后每12小时执行一次到从现在到4周后结束执行:EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK

实例:
前提:创建EVENT的用户需要只少对应schema的EVENT权限
最基本的create event只需要三个部分:
1. create event关键字以及一个event名称
2. on schedule子句
3. do子句

1. 在创建事件myevent1小时后执行,执行一条更新CREATE EVENT myevent    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOURDO  UPDATE myschema.mytable SET mycol = mycol + 1;2.2014年3月20日12点整清空test表:CREATE EVENT e_test    ON SCHEDULE AT TIMESTAMP '2014-03-20 12:00:00'    DO TRUNCATE TABLE test.aaa;3.5天后开启每天定时清空test表:CREATE EVENT e_test    ON SCHEDULE EVERY 1 DAY    STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY    DO TRUNCATE TABLE test.aaa;4.每天定时清空test表,5天后停止执行CREATE EVENT e_test    ON SCHEDULE EVERY 1 DAY    ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY    DO TRUNCATE TABLE test.aaa;5.5天后开启每天定时清空test表,一个月后停止执行:CREATE EVENT e_test    ON SCHEDULE EVERY 1 DAY    STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY    ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH    DO TRUNCATE TABLE test.aaa;6.每天定时清空test表(只执行一次,任务完成后就终止该事件):CREATE EVENT e_test    ON SCHEDULE EVERY 1 DAY    ON COMPLETION NOT PRESERVE    DO TRUNCATE TABLE test.aaa;[ON COMPLETION [NOT] PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOT PRESERVE。
四、修改Event:
ALTER   [DEFINER = { user | CURRENT_USER }]   EVENT event_name   [ON SCHEDULE schedule]   [ON COMPLETION [NOT] PRESERVE]   [RENAME TO new_event_name]   [ENABLE | DISABLE | DISABLE ON SLAVE]   [COMMENT 'comment']   [DO event_body]

说明:
对于任何一个拥有定义在database里面事件的event权限的用户都可以修改event,并且成功需改后,那个用户就会成为此event的definer

实例:CREATE EVENT myevent    ON SCHEDULE      EVERY 6 HOUR    COMMENT 'A sample comment.'    DO      UPDATE myschema.mytable SET mycol = mycol + 1;将上面的event从开始之后每6个小时执行一次改为从开始4个小时后每12小时执行一次只修改scheduleALTER EVENT myevent    ON SCHEDULE      EVERY 12 HOUR    STARTS CURRENT_TIMESTAMP + INTERVAL 4 HOUR;同时修改schedule和bodyALTER EVENT myevent    ON SCHEDULE      AT CURRENT_TIMESTAMP + INTERVAL 1 DAY    DO      TRUNCATE TABLE myschema.mytable;

关闭、启动、别名、移动、删除event:

临时关闭某个eventALTER EVENT myevent DISABLE;开启某个eventALTER EVENT myevent ENABLE;别名某个eventALTER EVENT olddb.myeventRENAME TO newdb.myevent;将myevent从olddb库移动到newdb库ALTER EVENT olddb.myeventRENAME TO newdb.myevent;删除eventDROP EVENT [IF EXISTS] event_name
五、查询Event信息:

Event信息相关表:
information_schema.events
mysql.event

查看事件的创建信息
show create event countsum \G

查看sem库的events信息
USE sem;
SHOW EVENTS \G

SHOW EVENTS FROM sem;

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
MySQL 5.1新特性之事件调度??Event Scheduler) - qj_l12@...
MySQL 事件调度器 定时调度
Mysql创建定时任务
【周期性执行事件】MySQL事件
MySQL函数大全 及用法示例
Linux下如何实现Mysql定时任务
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服