`
je_小彬
  • 浏览: 72220 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Mysql本地任务调度

 
阅读更多
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多任务调度系统是现代自动化仓储系统中的核心组成部分,它主要负责无人仓储设备,如自动引导车辆(AGV)的高效协调和管理。WCS(Warehouse Control System)系统定位在于实现仓库作业的自动化、智能化,提升...

    dolphinscheduler安装包和mysql的jdbc连接jar包

    在本压缩包中,包含的是DolphinScheduler的安装包以及MySQL的JDBC连接器,这将帮助用户将DolphinScheduler与MySQL数据库进行集成,实现任务调度的数据存储。 Apache DolphinScheduler 1.3.4是该版本的安装包,名为`...

    分布式任务调度

    ### 分布式任务调度知识点详解 #### 一、LTS(Light Task Scheduler)概述 **LTS**(轻量级任务调度器)是一款专为解决分布式环境下的任务调度问题而设计的框架。它支持多种类型的任务,如实时任务、定时任务以及...

    taskPHP基于php开发的定时计划任务框架,多进程实现任务的分配和运行

    `taskPHP`提供了灵活的任务调度机制,可以按照预定的时间间隔或特定的触发条件来安排任务。这使得开发者可以轻松创建一次性任务、周期性任务或者基于事件的任务。 ### 5. 设计模式 框架可能采用了观察者模式、工厂...

    Big Whale任务调度系统-其他

    巨鲸任务调度平台为美柚大数据研发的分布式计算任务调度系统,提供Spark、Flink等批处理任务的DAG执行调度和流处理任务的状态监测调度,并具有重复应用检测、大内存应用检测等功能。 服务基于Spring Boot 2.0开发,...

    mysql数据库转为sql数据库的工具

    3. `s2magent.exe`:这可能是辅助或后台进程的执行文件,用于支持主程序的一些功能,比如数据同步或调度任务。 4. `使用说明.txt`:这是一个文本文件,里面应该有简明的操作说明,指导用户如何使用这个工具进行...

    mysql备份.zip

    可能包含的命令有`mysqldump`、`gzip`(用于压缩备份文件以节省存储空间)和`crontab`(Linux的任务调度器,用于定期执行脚本)。shell脚本可能还涉及到权限设置、错误处理和邮件通知等功能,确保备份过程的可靠性和...

    基于Java开发的动态定时任务管理系统源码+使用说明.zip

    2. 本地数据库创建一个名为 `scheduling` 的库。 3. 修改配置文件 `src/main/resources/application.yml`,主要修改数据库连接的用户名和地址。 4. 启动项目。 5. 浏览器访问 `http://localhost:8080`,可以看到如下...

    QT版采集工具 ,产品级别,多线程采集数据,存储数据,快速导出数据,任务分配调度清晰,界面美观大方!

    总的来说,QT版采集工具是一款功能强大的数据采集解决方案,它结合了高效的采集能力、灵活的任务调度和友好的用户界面,适合各种需要大量数据处理和分析的场景。无论是个人项目还是企业级应用,都能从中受益。

    Laravel开发-mysql-dump

    为了实现定期备份,我们可以将`mysql-dump`命令集成到任务调度中。在`app/Console/Kernel.php`的`schedule()`方法内,添加相应的调度任务,例如每天凌晨执行一次备份。这样,系统会自动执行数据库备份,无需人工干预...

    mysql备份平台脚本

    总之,构建一个基于Apache和Xtrabackup的MySQL备份平台是一项复杂但重要的任务。通过这样的平台,你可以确保数据的安全,并在必要时快速恢复,从而降低业务风险。在实际操作中,还需要考虑备份策略的灵活性、备份的...

    安卓连接MySql数据库

    同时,为了提高用户体验,应尽量减少在后台进行大量数据操作,可以考虑采用异步任务、IntentService或者Android的JobScheduler等机制来调度数据库操作。 综上所述,通过`mysql-connector-java.jar`库,我们可以实现...

    Linux(Centos)全自动异地备份数据(WEB+Mysql).pdf

    6. crontab任务调度:crontab是Unix和类Unix系统中的一个定时任务调度工具。它允许用户编写脚本并在特定时间自动运行。在这里,它被用来定时执行自动备份脚本。 7. Shell脚本编写:Shell脚本是编写在Linux系统中...

    java_mysql_bak.zip_mysql 备份_备份_备份mysql

    6. 并发和调度:如果需要定期自动备份,可以将此功能封装到一个服务中,利用Java的定时任务框架如`ScheduledExecutorService`,或者集成更复杂的调度工具如Quartz。 在压缩包的文件名称列表中提到的"java 实现mysql...

    mysql_databases_all - 副本.zip_mysql备份自动上传七牛云

    自动化的备份任务通常通过cron job在Linux系统中实现,这是一种定时任务调度器,可以按照预设的时间间隔运行脚本。例如,每天凌晨执行一次备份,确保每天的数据都能得到保护。"mysql_databases_all - 副本.sh"很可能...

    mysql自动备份.rar

    提供的压缩包"mysql自动备份.rar"包含两个关键文件:`mysql_bk.sh`和`linux定时重启任务(mysql).docx`。下面我们将详细解释这两个文件以及如何利用它们来实现MySQL数据库的自动备份。 首先,`mysql_bk.sh`是一个...

    mysql Manager

    MySQL Manager是一款专为MySQL数据库设计的管理工具,主要用于简化数据库的日常管理和维护任务。这款工具提供了用户友好的图形界面,使得非技术背景的用户也能轻松地进行数据库操作。MySQL Manager 3 Lite是其轻量级...

    MySQL网络数据库指南

    最后,书中可能会包含一些高级主题,如分区表、全文搜索、存储引擎的选择(InnoDB与MyISAM的区别),以及如何利用MySQL的事件调度器来自动化任务。 总的来说,"MySQL网络数据库指南"是一本全面且实用的教程,无论是...

    python定时备份mysql数据库脚本

    `pymysql` 是Python连接MySQL数据库的第三方库,而 `schedule` 库则用于调度任务,实现定时执行。 在`dbbak2.py`这个脚本中,我们可能可以看到以下关键部分: 1. **连接MySQL**: 使用 `pymysql.connect()` 函数...

    ssh2自动备份mysql数据库 spring定时器

    - ScheduleData.java 和 ScheduleInfoManager.java 可能与任务调度的数据管理相关,负责存储和处理任务的配置信息。 综上所述,这个项目展示了如何结合SSH2和Spring定时任务来实现自动化的MySQL数据库备份,对于...

Global site tag (gtag.js) - Google Analytics