一、前言
自 MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作。更值得 一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精 确到每分钟执行一次。对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合。
事件调度器有时也可称为临时触发器(temporal triggers),因为事件调度器是基于特定时间周期触发来执行某些任务,而触发器(Triggers)是基于某个表所产生的事件触发的,区别也就在这里。
在使用这个功能之前必须确保event_scheduler已开启,可执行
SET GLOBAL event_scheduler = 1;
---或我们可以在配置my.cnf文件 中加上 event_scheduler = 1
或
SET GLOBAL event_scheduler = ON;
来开启,也可以直接在启动命令加上“--event_scheduler=1”,例如:
mysqld ... --event_scheduler=1
要查看当前是否已开启事件调度器,可执行如下SQL:
SHOW VARIABLES LIKE 'event_scheduler';
或
SELECT @@event_scheduler;
或
SHOW PROCESSLIST;
二、创建事件(CREATE EVENT)
先来看一下它的语法:
1 |
CREATE EVENT [IF NOT EXISTS] event_name
|
3 |
[ ON COMPLETION [ NOT ] PRESERVE]
|
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) 首先来看一个简单的例子来演示每秒插入一条记录到数据表
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秒钟后,再执行查询看看:
mysql> 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表:
2 |
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY
|
3 |
DO TRUNCATE TABLE test.aaa;
|
3) 2007年7月20日12点整清空test表:
2 |
ON SCHEDULE AT TIMESTAMP '2007-07-20 12:00:00'
|
3 |
DO TRUNCATE TABLE test.aaa;
|
4) 每天定时清空test表:
3 |
DO TRUNCATE TABLE test.aaa;
|
5) 5天后开启每天定时清空test表:
3 |
STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
|
4 |
DO TRUNCATE TABLE test.aaa;
|
6) 每天定时清空test表,5天后停止执行:
3 |
ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
|
4 |
DO TRUNCATE TABLE test.aaa;
|
7) 5天后开启每天定时清空test表,一个月后停止执行:
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表(只执行一次,任务完成后就终止该事件):
3 |
ON COMPLETION NOT PRESERVE
|
4 |
DO TRUNCATE TABLE test.aaa;
|
[ENABLE | DISABLE]可是设置该事件创建后状态是否开启或关闭,默认为ENABLE。
[COMMENT ‘comment’]可以给该事件加上注释。
三、修改事件(ALTER EVENT)
3 |
[RENAME TO new_event_name]
|
4 |
[ ON COMPLETION [ NOT ] PRESERVE]
|
1) 临时关闭事件
ALTER EVENT e_test DISABLE;
2) 开启事件
ALTER EVENT e_test ENABLE;
3) 将每天清空test表改为5天清空一次:
ALTER EVENT e_test
ON SCHEDULE EVERY 5 DAY;
四、删除事件(DROP EVENT)
语法很简单,如下所示:
DROP EVENT [IF EXISTS] event_name
例如删除前面创建的e_test事件
DROP EVENT e_test;
当然前提是这个事件存在,否则会产生ERROR 1513 (HY000): Unknown event错误,因此最好加上IF EXISTS
DROP EVENT IF EXISTS e_test;
注意:如果你将event执行了Alter event event_name disable.那么当你重新启动mysql服务
器后,该event将被删除(测试版本:5.1.30)
应用案例
本案例是利用 event scheduler 的特性,每秒钟调用一次存储过程,用于判断 SLAVE 是否正常运行,如果发现 SLAVE 关闭了,忽略 0 次错误,然后重新启动 SLAVE。
* 首先创建存储过程
02 |
create procedure `Slave_Monitor`()
|
04 |
SELECT VARIABLE_VALUE INTO @SLAVE_STATUS
|
05 |
FROM information_schema.GLOBAL_STATUS
|
06 |
WHERE VARIABLE_NAME= 'SLAVE_RUNNING' ;
|
07 |
IF ( 'ON' != @SLAVE_STATUS) THEN
|
08 |
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=0;
|
由于存储过程中无法调用类似 SHOW SLAVE STATUS 这样的语句,因此无法得到确切的复制错误信息和错误代码,不能进一步的处理 SLAVE 停止的各种情况。
* 接着,创建任务
1 |
CREATE EVENT IF NOT EXISTS `Slave_Monitor`
|
2 |
ON SCHEDULE EVERY 5 SECOND
|
创建了一个任务,每 5秒钟执行一次,任务结束后依旧保留该任务,而不是删除。当然了,在本例中的任务不会结束,除非将它手动禁止了。
*
如果在运行中想要临时关闭一下某个任务,执行 ALTER EVENT 语句即可:
(root:localhost:)test> alter event `Slave_Monitor` ON
COMPLETION PRESERVE DISABLE;
(root:localhost:)test> alter event `Slave_Monitor` ON
COMPLETION PRESERVE ENABLE;
分享到:
相关推荐
base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz
ZZ561401.CAB ZZ561401.CAB ZZ561401.CAB
wincc SIMATIC WinCC是第一个使用最新的32位技术的过程监视系统,具有良好的开放性和灵活性。 从面市伊始,用户就对SIMATIC WinCC印象深刻。
MySQL 是一个 DBMS(数据库管理系统),由瑞典MySQLAB 公司开发,目前属于 Oracle 公司,MySQL是最流行的关系型数据库管理系统(关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来...
ZZ-2022004 建筑CAD赛项赛题 中职赛项 适合正在准备技能大赛的人群
这个是我找了2个小时,浪费了150积分才找到的,为了让我们这些java爱好者,少走弯路,我把他分享出来,https://blog.csdn.net/weixin_39845780/article/details/116642786 或者你也可以直接在这里下载
基于Springboot+MybatisPlus+Mysql开发的校园二手交易市场源码,部署步骤如下: 1.使用idea或eclipse等工具将项目导入并打开 2.新建一个mysql数据库,将数据库db_campus_market.sql脚本导入 3.并在配置文件...
在CAD中想要快速测量长度,在CAD工具栏找到加载应用程序,再点击加载 加载成功后在输入栏输入“zz”(不分大小写)在选择你需要测量的线段即可。
我们研究了四轻子最终状态ℓ+ℓ-ℓ+ℓ-的产生,这些状态主要由一对弱电Z玻色子ZZ产生。 使用LoopSim方法,我们合并ZZ和ZZ + jet的NLO QCD结果,并获得ZZ产生的近似NNLO预测。 还包括对ZZ过程的精确胶子融合环平方的...
一个mysql数据备份脚本 可以同时备份多个数据库 可以保留制定天数 比如可以设置只保留近三天的数据
,主图指标,顶底信号,突破,转折信号,都很明显
程序员的编辑器——VIM(zz) - 饮水思源
留言本改自柏图留言本 BTB 1.2 管理员:zz809 密 码:zz809.com
zz_layer.il是源代码,install.bat是安装的 使用举例:zz 1-3 4 126 127 层号定义,与PADS类似:1~120是etch ;SolderMask: 121(top) 128(bot) ;Silkscreen: 126(top) 129(bot) ;Assembly: 127(top) 130(bot) ;Paste...
将压缩包解压到Linux任意目录,执行\mysql\sbin\install.sh,即可进行安装。
ZZ公司安全生产守则.docx
zz;ldkfjntmtmsbggyyessdd
php $link=mysql_connect(‘localhost’,’root’,’zz’) or die(mysql_error()); mysql_select_db(‘test’) or die(‘no db’); mysql_query(‘SET NAMES utf8’); echo 99; ?> 运行后报错 Can’t connect to ...
基于国家标准的endnote的输出样式,适用于学生党论文插入文献参考,较为方便。endnote论文神器。
ZZ-2021030 网络搭建与应用赛项赛卷《网络环境》.pdf