自MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event
Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作。更值得
一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精
确到每分钟执行一次。对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合。事件调度器有时也可称为临时触发器
(temporal
triggers),因为事件调度器是基于特定时间周期触发来执行某些任务,而触发器(Triggers)是基于某个表所产生的事件触发的,区别也就在这
里。
创建事件(CREATE EVENT)
先来看一下它的语法:CREATE EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
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) 首先来看一个简单的例子来演示每秒插入一条记录到数据表USE test;
CREATE TABLE aaa (timeline TIMESTAMP);
CREATE EVENT e_test_insert
ON SCHEDULE EVERY 1 SECOND
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表:CREATE EVENT e_test
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;
3) 2007年7月20日12点整清空test表:CREATE EVENT e_test
ON SCHEDULE AT TIMESTAMP '2007-07-20 12:00:00'
DO TRUNCATE TABLE test.aaa;
4) 每天定时清空test表:CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
DO TRUNCATE TABLE test.aaa;
5) 5天后开启每天定时清空test表:CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;
6) 每天定时清空test表,5天后停止执行:CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;
7) 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;
[ON COMPLETION [NOT] PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOT PRESERVE。
8) 每天定时清空test表(只执行一次,任务完成后就终止该事件):CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
ON COMPLETION NOT PRESERVE
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) 临时关闭事件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;
附:如需规定每天几点执行mysql 请见下例
CREATE EVENT myevent
-> ON SCHEDULE EVERY 1 DAY STARTS '2009-10-24 02:00:00'
-> DO
-> delete from t where ptime <date_sub(curdate(),interval 3 day);
/*创建定时处理的事件--用户每天将gps上报数据 通过存储过程autogpsinfo_TurnStore 记录到相应的数据表*/
CREATE event gpsinfo_TurnStore
ON SCHEDULE EVERY 1 DAY STARTS '2011-01-10 04:00:00'
DO
CALL autogpsinfo_TurnStore;
还有个地方需要注意的,如果是第一次用的话,可能出现不执行的情况,不是代码写错了。是因为需要先打开事件调度器
/*使用系统变量event_scheduler来打开事件调度器,true为打开,false为关闭*/
SET GLOBAL event_scheduler=TRUE
执行了这句代码之后就OK了
分享到:
相关推荐
这篇文章可能详述了设置MySQL定时任务的具体步骤,包括如何使用CREATE EVENT语句创建事件,以及如何使用ALTER EVENT或DROP EVENT修改或删除已存在的任务。 “mysql计划任务每天定时执行.url”则可能是一个指导如何...
当结合Quartz,一个强大的任务调度库,我们可以实现动态的定时任务创建,这在业务逻辑中有着广泛的应用,如数据同步、定时报表生成等。 **Spring框架** Spring框架是Java开发者必备的工具之一。它提供了一个统一的...
MySQL中的定时任务,通常指的是Event事件,它是一种内置的机制,允许用户在特定时间或周期性地执行SQL语句或存储过程,而无需依赖操作系统级别的计划任务。Event事件的引入,使得数据库自身就能处理定时任务,提高了...
### MySQL数据库定时备份知识点 #### 一、MySQL数据库备份的重要性 在现代企业的信息化管理中,数据的安全性至关重要。定期对MySQL数据库进行备份是一项基础而重要的维护工作,它可以帮助企业防止因硬件故障、软件...
这两种策略可以灵活组合,以满足不同业务需求,比如在处理实时交易数据时,可能更倾向于按数量触发,而在分析用户行为时,定时触发可能更为合适。 **数据写入MySQL** 在聚合操作完成后,Flink可以使用`...
本篇文章将深入探讨如何在Spring Boot 2.1.6版本中配置和管理定时任务,并实现任务的集群部署以及任务的持久化存储到MySQL数据库。 **一、Spring Boot定时任务** 1. **@Scheduled注解**:Spring Boot提供了对定时...
在本系统中,MySQL用于存储定时任务的相关信息,如任务ID、任务名称、执行频率、上次执行时间、下次执行时间等,使得任务调度有据可依,同时方便对任务进行增删改查等操作。 接口化设计是这个系统的一大亮点,它...
MySQL通过“事件调度器”(Event Scheduler)功能支持定时任务。默认情况下,此功能可能处于关闭状态,需要手动开启。 - **查询事件调度器状态**:在MySQL命令行中执行以下命令查询事件调度器的状态: ```sql SHOW...
以上就是关于"mysql数据库定时备份,按时间存放sql文件"的详细说明,包括如何创建SQL备份文件,设置批处理脚本,以及使用Windows计划任务自动化备份过程,以及恢复数据的方法。这种备份策略能有效地保护数据安全,...
在这个项目中,Quartz被用来实现动态管理的定时任务,例如周期性的数据处理或服务调用。 5. **MySQL**:MySQL是一种流行的关系型数据库管理系统,广泛用于存储和处理项目中的结构化数据。在这里,MySQL作为后端...
QT MySQL 定时备份是将MySQL数据库的数据在特定时间点自动保存到本地或者远程服务器的过程,这通常通过编程实现,而QT作为一个强大的跨平台应用程序开发框架,提供了与MySQL数据库交互的API,使得我们可以利用QT来...
结合这些元素,我们可以推测这个压缩包中的内容可能包括一个shell脚本文件,该脚本监控Logstash的日志,使用MySQL作为数据源或目标,通过Elasticsearch进行数据处理,当Logstash出现问题时,利用mail465通过SMTP发送...
通过它,你可以设置任意时间或基于特定事件触发的应用程序、脚本或者批处理文件的运行。要创建定时备份数据库的任务,你需要遵循以下步骤: 1. 打开“控制面板”或搜索“任务计划程序”并启动。 2. 在右侧窗格中...
总的来说,Quartz通过将任务和触发器的配置持久化到数据库,提供了强大的任务管理和监控能力,使得在复杂的企业级应用中能够灵活地处理定时任务。"quartz.sql"文件的使用,可以简化设置和维护过程,让开发者专注于...
事件调度器是定时触发执行的,在这个角度上也可以称作是”临时的触发器”。触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间隔)时间执行一些语句。事件是由一个特定的线程来管理的,也...
本资料“存储过程Demo.zip”提供了一个完整的存储过程示例,同时涉及到事件触发机制,这对于理解和应用MySQL存储过程至关重要。 1. **存储过程的基本概念**: 存储过程是数据库中存储的一组预编译的SQL语句,可以...
同时,SpringBatch可以利用MySQL存储批量处理的状态,便于在处理过程中或处理失败后进行恢复。 **模版的使用** 这个参考模版包含了完成上述整合所需的全部代码和配置。导入到常用的IDE(如Eclipse或IntelliJ IDEA)...
在“数据库mysql”这部分,说明了我们的任务调度信息将存储在MySQL数据库中。Quartz需要一张特定的数据库表来存储其状态信息,例如qrtz_triggers、qrtz_job_details等。这些表的创建通常通过Quartz提供的SQL脚本来...
此外,还可以利用Spring的AOP和事件机制,对任务执行过程进行监控和处理。 总之,Spring与Quartz的整合提供了灵活且强大的定时任务解决方案,适用于各种复杂的调度需求。正确配置和使用,能够帮助我们构建高效、...
存储过程的调用可能是为了执行特定的数据处理任务,如数据聚合、数据清洗、业务逻辑处理等。 结合提供的压缩包子文件名称,我们可以推测这些文件可能是记录了不同时间粒度的数据,如`hour.txt`可能包含每小时的数据...