MySQL5.1.x 版本中引入了一项新特性 EVENT ,顾名思义就是事件、定时任务机制,在指定的时间单元内执行特定的任务,因此今后一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。此功能是对 Oracle 的 Job/Schedule 的模仿, 5.1.X 版本以上才支持。
创建 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 sql_statement;
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}
例如创建一个每 30 秒清空 tableA 数据的任务
CREATE EVENT E_DELETE_ASO_TOKEN ON SCHEDULE EVERY 30 SECOND DO DELETE FROM tableA ;
默认 EVENT 支持是没有启动的,可以通过下面的命令来查看状态:
Select @@event_scheduler;
如果返回 OFF ,则需要执行下面的命令启动:
SET GLOBAL event_scheduler = ON;
好了,上面虽然启动了 EVENT ,但是每次重启 mysql 之后 EVENT 并没有自动启动,那么如何让它自动启动呢?
方法一:找到当前使用的 .cnf 文件,在 [mysqld] 的下面加入如下行
event_scheduler=1
方法二:启动 mysql 的时候增加 --event_scheduler=1
mysql start --event_scheduler=1
事件详细语法事例 (EVENT)
1> 创建事件 (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 ’ ] 可以给该事件加上注释。
2> 修改事件 (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;
3> 删除事件 (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;
分享到:
相关推荐
AGV WCS多任务调度系统是现代自动化仓储系统中的核心组成部分,它主要负责无人仓储设备,如自动引导车辆(AGV)的高效协调和管理。WCS(Warehouse Control System)系统定位在于实现仓库作业的自动化、智能化,提升...
在本压缩包中,包含的是DolphinScheduler的安装包以及MySQL的JDBC连接器,这将帮助用户将DolphinScheduler与MySQL数据库进行集成,实现任务调度的数据存储。 Apache DolphinScheduler 1.3.4是该版本的安装包,名为`...
### 分布式任务调度知识点详解 #### 一、LTS(Light Task Scheduler)概述 **LTS**(轻量级任务调度器)是一款专为解决分布式环境下的任务调度问题而设计的框架。它支持多种类型的任务,如实时任务、定时任务以及...
`taskPHP`提供了灵活的任务调度机制,可以按照预定的时间间隔或特定的触发条件来安排任务。这使得开发者可以轻松创建一次性任务、周期性任务或者基于事件的任务。 ### 5. 设计模式 框架可能采用了观察者模式、工厂...
巨鲸任务调度平台为美柚大数据研发的分布式计算任务调度系统,提供Spark、Flink等批处理任务的DAG执行调度和流处理任务的状态监测调度,并具有重复应用检测、大内存应用检测等功能。 服务基于Spring Boot 2.0开发,...
3. `s2magent.exe`:这可能是辅助或后台进程的执行文件,用于支持主程序的一些功能,比如数据同步或调度任务。 4. `使用说明.txt`:这是一个文本文件,里面应该有简明的操作说明,指导用户如何使用这个工具进行...
可能包含的命令有`mysqldump`、`gzip`(用于压缩备份文件以节省存储空间)和`crontab`(Linux的任务调度器,用于定期执行脚本)。shell脚本可能还涉及到权限设置、错误处理和邮件通知等功能,确保备份过程的可靠性和...
2. 本地数据库创建一个名为 `scheduling` 的库。 3. 修改配置文件 `src/main/resources/application.yml`,主要修改数据库连接的用户名和地址。 4. 启动项目。 5. 浏览器访问 `http://localhost:8080`,可以看到如下...
总的来说,QT版采集工具是一款功能强大的数据采集解决方案,它结合了高效的采集能力、灵活的任务调度和友好的用户界面,适合各种需要大量数据处理和分析的场景。无论是个人项目还是企业级应用,都能从中受益。
为了实现定期备份,我们可以将`mysql-dump`命令集成到任务调度中。在`app/Console/Kernel.php`的`schedule()`方法内,添加相应的调度任务,例如每天凌晨执行一次备份。这样,系统会自动执行数据库备份,无需人工干预...
总之,构建一个基于Apache和Xtrabackup的MySQL备份平台是一项复杂但重要的任务。通过这样的平台,你可以确保数据的安全,并在必要时快速恢复,从而降低业务风险。在实际操作中,还需要考虑备份策略的灵活性、备份的...
同时,为了提高用户体验,应尽量减少在后台进行大量数据操作,可以考虑采用异步任务、IntentService或者Android的JobScheduler等机制来调度数据库操作。 综上所述,通过`mysql-connector-java.jar`库,我们可以实现...
6. crontab任务调度:crontab是Unix和类Unix系统中的一个定时任务调度工具。它允许用户编写脚本并在特定时间自动运行。在这里,它被用来定时执行自动备份脚本。 7. Shell脚本编写:Shell脚本是编写在Linux系统中...
6. 并发和调度:如果需要定期自动备份,可以将此功能封装到一个服务中,利用Java的定时任务框架如`ScheduledExecutorService`,或者集成更复杂的调度工具如Quartz。 在压缩包的文件名称列表中提到的"java 实现mysql...
自动化的备份任务通常通过cron job在Linux系统中实现,这是一种定时任务调度器,可以按照预设的时间间隔运行脚本。例如,每天凌晨执行一次备份,确保每天的数据都能得到保护。"mysql_databases_all - 副本.sh"很可能...
提供的压缩包"mysql自动备份.rar"包含两个关键文件:`mysql_bk.sh`和`linux定时重启任务(mysql).docx`。下面我们将详细解释这两个文件以及如何利用它们来实现MySQL数据库的自动备份。 首先,`mysql_bk.sh`是一个...
MySQL Manager是一款专为MySQL数据库设计的管理工具,主要用于简化数据库的日常管理和维护任务。这款工具提供了用户友好的图形界面,使得非技术背景的用户也能轻松地进行数据库操作。MySQL Manager 3 Lite是其轻量级...
最后,书中可能会包含一些高级主题,如分区表、全文搜索、存储引擎的选择(InnoDB与MyISAM的区别),以及如何利用MySQL的事件调度器来自动化任务。 总的来说,"MySQL网络数据库指南"是一本全面且实用的教程,无论是...
`pymysql` 是Python连接MySQL数据库的第三方库,而 `schedule` 库则用于调度任务,实现定时执行。 在`dbbak2.py`这个脚本中,我们可能可以看到以下关键部分: 1. **连接MySQL**: 使用 `pymysql.connect()` 函数...
- ScheduleData.java 和 ScheduleInfoManager.java 可能与任务调度的数据管理相关,负责存储和处理任务的配置信息。 综上所述,这个项目展示了如何结合SSH2和Spring定时任务来实现自动化的MySQL数据库备份,对于...