一、前言
自 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
在CentOS7上安装MySQL 5.7是一个常见的任务,特别是在搭建服务器环境时。本文将详细解释如何通过YUM在CentOS7上安装MySQL 5.7.11,并涵盖安装过程中的关键步骤。 首先,我们需要确保系统中没有预装的MySQL。运行`...
进入MySQL的命令行界面后,你可以创建新的数据库,例如: ```sql CREATE DATABASE mydatabase; ``` 接着,创建新用户并赋予其对数据库的权限: ```sql CREATE USER 'newuser'@'localhost' IDENTIFIED BY '...
9. **日常管理**:MySQL 5.6的管理操作包括创建数据库、用户、表,备份与恢复数据,以及性能优化等。这些都需要使用SQL语句或者MySQL提供的客户端工具。 10. **性能改进**:MySQL 5.6版本引入了一些性能优化特性,...
MySQL解压缩版配置向导是针对那些选择不使用安装程序而是直接解压MySQL安装包进行安装的用户提供的指南。这种方式在某些情况下更为灵活,比如在没有权限运行安装程序或者需要自定义配置的情况下。以下是一份详细的...
ZZ561401.CAB ZZ561401.CAB ZZ561401.CAB
一个mysql数据备份脚本 可以同时备份多个数据库 可以保留制定天数 比如可以设置只保留近三天的数据
1. 当任务提交到线程池时,如果当前运行的线程数少于`corePoolSize`,则直接创建新线程执行任务。 2. 如果线程池已达`corePoolSize`,任务会被放入工作队列等待。 3. 当工作队列已满且当前线程数未达到`...
wincc SIMATIC WinCC是第一个使用最新的32位技术的过程监视系统,具有良好的开放性和灵活性。 从面市伊始,用户就对SIMATIC WinCC印象深刻。
实际操作是学习的关键部分,通过编写和调试代码,开发者能更好地理解PHP和MySQL如何协同工作,从而创建出功能丰富的Web应用。 总的来说,《MySQL/PHP数据库应用开发指南》涵盖了从基础的数据库设计到高级的Web应用...
此病毒可能通过创建定时任务、产生僵尸进程以及植入恶意文件等方式对系统造成威胁。以下将详细介绍各步骤中的关键知识点。 ### 一、查看主机的定时任务 #### 知识点1:定时任务(Cron Jobs) 在Linux系统中,定时...
MySQL 是一个 DBMS(数据库管理系统),由瑞典MySQLAB 公司开发,目前属于 Oracle 公司,MySQL是最流行的关系型数据库管理系统(关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来...
MySQL 8.0.15 Windows 32位,安装版的百度云盘链接!教程可查看我的博文,超级适合小白,虽然安装过程稍微步骤多,但免安装版本的“服务无法启动”更让人绝望啊!
我们研究了四轻子最终状态ℓ+ℓ-ℓ+ℓ-的产生,这些状态主要由一对弱电Z玻色子ZZ产生。 使用LoopSim方法,我们合并ZZ和ZZ + jet的NLO QCD结果,并获得ZZ产生的近似NNLO预测。 还包括对ZZ过程的精确胶子融合环平方的...
在CAD中想要快速测量长度,在CAD工具栏找到加载应用程序,再点击加载 加载成功后在输入栏输入“zz”(不分大小写)在选择你需要测量的线段即可。
ZZ-2022004 建筑CAD赛项赛题 中职赛项 适合正在准备技能大赛的人群
首先,确保你已经安装了MySQL数据库服务器,比如使用XAMPP,它包含了MySQL、Apache等服务。XAMPP简化了本地开发环境的搭建,包括MySQL数据库的启动和管理。 在Eclipse这样的集成开发环境中,你需要创建一个新的Java...
这个是我找了2个小时,浪费了150积分才找到的,为了让我们这些java爱好者,少走弯路,我把他分享出来,https://blog.csdn.net/weixin_39845780/article/details/116642786 或者你也可以直接在这里下载
Apache、PHP和MySQL是互联网开发中的重要组成部分,它们在Windows操作系统上的配置对于许多开发者来说是一项基础任务。Apache作为流行的Web服务器,PHP是一种广泛使用的服务器端脚本语言,而MySQL则是功能强大的关系...
Activity是用户界面的主要构成部分,Service用于后台运行任务,BroadcastReceiver处理系统广播事件,而ContentProvider则负责数据的存储与共享。了解并熟练掌握这些组件的用法,对于构建功能完善的Android应用至关...