文档章节

MySQL事件调度器(Event Scheduler)

五大三粗
 五大三粗
发布于 2015/06/01 17:43
字数 1033
阅读 12
收藏 1
点赞 0
评论 0

一、介绍

事件调度器是在 MySQL 5.1 中新增的另一个特色功能,可以作为定时任务调度器,取代部分原先只能用操作系统任务调度器才能完成的定时功能。而且 MySQL 的事件调度器可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下就非常实用了。

事件调度器是定时触发执行的,在这个角度上也可以称作是”临时的触发器”。触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间隔)时间执行一些语句。事件是由一个特定的线程来管理的,也就是所谓的”事件调度器”。启用事件调度器后,拥有 SUPER 权限的账户执行 SHOW PROCESSLIST 就可以看到这个线程了。通过设定全局变量event_scheduler 的值即可动态的控制事件调度器是否启用。

在使用这个功能之前必须确保event_scheduler已开启,可执行
1 SET GLOBAL event_scheduler = 1;
1 SET GLOBAL event_scheduler = ON;
来开启,也可以直接在启动命令加上“–event_scheduler=1”,例如:
1 mysqld ... --event_scheduler=1
要查看当前是否已开启事件调度器,可执行如下SQL:
1 SHOW VARIABLES LIKE 'event_scheduler';
1 SELECT @@event_scheduler;

二、创建事件(CREATE EVENT)

先来看一下它的语法:
1 CREATE EVENT [IF NOT EXISTS] event_name
2     ON SCHEDULE schedule
3     [ON COMPLETION [NOT] PRESERVE]
4     [ENABLE | DISABLE]
5     [COMMENT 'comment']
6     DO sql_statement;
schedule:
AT TIMESTAMP [+ INTERVAL INTERVAL]
| EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]

INTERVAL:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

1) 首先来看一个简单的例子来演示每秒插入一条记录到数据表
1 USE test;
2 CREATE TABLE aaa (timeline TIMESTAMP);
3 CREATE EVENT e_test_insert
4         ON SCHEDULE EVERY 1 SECOND
5         DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);
等待3秒钟后,再执行查询看看:
1 SELECT * FROM aaa;

+———————+
| timeline |
+———————+
| 2007-07-18 20:44:26 |
| 2007-07-18 20:44:27 |
| 2007-07-18 20:44:28 |
+———————+

2) 5天后清空test表:
1 CREATE EVENT e_test
2         ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY
3         DO TRUNCATE TABLE test.aaa;
3) 2007年7月20日12点整清空test表:
1 CREATE EVENT e_test
2         ON SCHEDULE AT TIMESTAMP '2007-07-20 12:00:00'
3         DO TRUNCATE TABLE test.aaa;
4) 每天定时清空test表:
1 CREATE EVENT e_test
2         ON SCHEDULE EVERY 1 DAY
3         DO TRUNCATE TABLE test.aaa;
5) 5天后开启每天定时清空test表:
1 CREATE EVENT e_test
2         ON SCHEDULE EVERY 1 DAY
3         STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
4         DO TRUNCATE TABLE test.aaa;
6) 每天定时清空test表,5天后停止执行:
1 CREATE EVENT e_test
2         ON SCHEDULE EVERY 1 DAY
3         ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
4         DO TRUNCATE TABLE test.aaa;
7) 5天后开启每天定时清空test表,一个月后停止执行:
1 CREATE EVENT e_test
2         ON SCHEDULE EVERY 1 DAY
3         STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
4         ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
5         DO TRUNCATE TABLE test.aaa;

[ON COMPLETION [NOT] PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOT PRESERVE。

8 ) 每天定时清空test表(只执行一次,任务完成后就终止该事件):
1 CREATE EVENT e_test
2         ON SCHEDULE EVERY 1 DAY
3         ON COMPLETION NOT PRESERVE
4         DO TRUNCATE TABLE test.aaa;
[ENABLE | DISABLE]可是设置该事件创建后状态是否开启或关闭,默认为ENABLE。
[COMMENT 'comment']可以给该事件加上注释。

三、修改事件(ALTER EVENT)

ALTER EVENT event_name
[ON SCHEDULE schedule]
[RENAME TO new_event_name]
[ON COMPLETION [NOT] PRESERVE]
[COMMENT 'comment']
[ENABLE | DISABLE]
[DO sql_statement]

1) 临时关闭事件
1 ALTER EVENT e_test DISABLE;
2) 开启事件
1 ALTER EVENT e_test ENABLE;
3) 将每天清空test表改为5天清空一次:
1 ALTER EVENT e_test
2         ON SCHEDULE EVERY 5 DAY;

四、删除事件(DROP EVENT)

语法很简单,如下所示:
1 DROP EVENT [IF EXISTS] event_name
例如删除前面创建的e_test事件
1 DROP EVENT e_test;
当然前提是这个事件存在,否则会产生ERROR 1513 (HY000): Unknown event错误,因此最好加上IF EXISTS
DROP EVENT IF EXISTS e_test;

五、后续

该特性确实非常有用,可作为定时清空数据表、监控主从服务器、汇总数据到另一张表等等,并且可以精确到每秒,实时性也可以得到保障

© 著作权归作者所有

共有 人打赏支持
五大三粗
粉丝 155
博文 890
码字总数 4537901
作品 0
广州
程序员
MySQL的事件调度器使用介绍

MySQL的事件调度器使用介绍 自MySQL5.1.0起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务,可以看作基于时间的触发器。 一、开启 事件调度默认...

开元中国2015 ⋅ 2015/06/25 ⋅ 0

MySQL之事件学习整理

在使用事件之前需要激活MySQL的事件调度器(Event Scheduler),激活方式如下: set global event_scheduler=1 或者 set global event_scheduler=on 然后我们可以查看调度器是否已经开启: ...

一宁 ⋅ 2012/04/25 ⋅ 0

MySQL事件调度器(Event Scheduler)介绍

一、介绍 事件调度器是在 MySQL 5.1 中新增的另一个特色功能,可以作为定时任务调度器,取代部分原先只能用操作系统任务调度器才能完成的定时功能。而且 MySQL 的事件调度器可以实现每秒钟执...

Amamatthew ⋅ 2014/09/26 ⋅ 0

MySQL 定时任务event

由于一些业务需求,我们可能需要定时清除数据库一些废弃的数据,可以使用mysql的存储过程和事件来完成。 下面例子定时清除日志表log中指定天数前的数据 1、创建日志表log CREATE TABLE IF N...

魔山 ⋅ 2013/08/01 ⋅ 0

Mysql定时任务&存储过程

1、定时任务 1.1 简述 Mysql属于中小型 数据库系统,它的事件调度器Event Scheduler是在 mysql 5.1才开始引入事件调度器是在 MySQL 5.1 中新增的另一个特色功能,可以作为定时任务调度器,取...

bobo_lin ⋅ 2012/08/29 ⋅ 0

navicat下mysql任务计划

对于mysql的计划任务需要注意以下两点 1.否开启了此功能,SHOW VARIABLES LIKE 'eventscheduler'; 如果没有开启需要在my.ini or my.cnf 中的 [mysqld] 添加 eventscheduler=ON 2.如果客户端远...

HTCKF ⋅ 2015/05/18 ⋅ 1

利用mysql事件调度定时删除binlog

1 开启事件调度器: set global event_scheduler = 1; 2 删除10天前的binlog,并设置每天检查: create event deletebinlog on schedule every 1 day do purge master logs before datesub(no......

hanowa ⋅ 2014/04/18 ⋅ 0

详解 MySQL 的计划任务

注意:5.1以后才支持! 让MYSQL定期执行指定的一条命令。功能类似于crontab。 1、 检查你的MYSQL是否开了这个功能 SHOW VARIABLES LIKE 'event_scheduler'; 我执行了一遍发现记录为空说明我的...

华宰 ⋅ 2011/05/30 ⋅ 3

Mysql中的事件

在系统管理或者数据库管理中,经常要周期性的执行某一个命令或者SQL语句。对于linux系统熟悉的人都知道linux的cron计划任务,能很方便地实现定期运行指定命令的功能。Mysql在5.1以后推出了事...

shaohan ⋅ 2014/03/15 ⋅ 0

MYSQL定时执行存储过程实例

重新定义mysql命令行结束符为//,命令行创建存储过程需要。 delimiter // MySQL5.1.x版本中引入了一项新特性EVENT,顾名思义就是事件、定时任务机制,在指定的时间单元内执行特定的任务,因此...

逸舟 ⋅ 2011/03/28 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud相关项目

Spring Cloud Config 配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion。 Spring Cloud Bus 事件、消息总线,用于在集群(例如,配...

明理萝 ⋅ 28分钟前 ⋅ 1

更新队友POM文件后报错

打开报错的地方的pom及其引用方法所在文件的pom,观察其版本号是否一致,不一致进行更改

森火 ⋅ 34分钟前 ⋅ 0

IDEA使用sonarLint

一、IDEA如何安装SonarLint插件 1.打开 Idea 2.点击【File】 3.点击【Settings】 4.点击【Plugins】 5.在搜索栏中输入“sonarlint”关键字 6.点击【Install】进行安装 7.重启Idea 二、IDEA如...

开源中国成都区源花 ⋅ 39分钟前 ⋅ 0

Succinct Data Structure

作者:唐刘 最近看了一篇论文 SuRF: Practical Range Query Filtering with Fast Succinct Tries,里面提到使用一种新的数据结构 Succinct Range Filter(SuRF) 替换掉了 RocksDB 默认的 Bloo...

TiDB ⋅ 39分钟前 ⋅ 0

Java进阶之内存模型介绍

Java进阶之内存模型介绍 前言 不管在什么编程语言里面,读取和写入都是我们程序最普遍的操作,在单线程的程序里面我们可能不关注线程的读写问题,但是一旦到多线程的环境下,读和写就会变得非...

九劫散仙 ⋅ 41分钟前 ⋅ 0

在windows上搭建一个ftp服务器

一、关于ftp FTP 是File Transfer Protocol的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序。基于不同的操作系统有不同的FTP应用程序...

zctzl ⋅ 45分钟前 ⋅ 0

JDK8 排序

import java.util.Collections;import java.util.List;import java.util.ArrayList;import java.util.Comparator; public class JavaTest { public static void main(String......

Jeam_ ⋅ 55分钟前 ⋅ 0

api管理平台汇总

swagger crapApi RAP xxl-api apidoc

facula ⋅ 55分钟前 ⋅ 0

Java 11 快要来了,编译 & 运行一个命令搞定!

Java 11 马上要来了,原定于 9 月发布,还有不到 3 个月了,敬请期待更多新功能被加入到 11 当中,本文本讲的是 JEP 330 这个新特性。 化繁为简,一个命令编译运行源代码 看下面的代码。 //...

Java技术栈 ⋅ 58分钟前 ⋅ 0

谷歌运营了一年多的无人出租车,得出了四条宝贵的经验

简评:并不是谷歌运营,不过国内对 Waymo 不敏感,就标题党了一下请多谅解。另外网友对于无人出租车是认可的,但是觉得如果价格没有优势,还是回去乘坐人类驾驶的汽车,毕竟这是人家的经济来...

极光推送 ⋅ 58分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部