`

(ZZ)mysql创建定时任务

 
阅读更多

一、前言
  自 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 [IFNOT EXISTS] event_name
2    ONSCHEDULE schedule
3    [ONCOMPLETION [NOT] PRESERVE]
4    [ENABLE | DISABLE]
5    [COMMENT 'comment']
6    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) 首先来看一个简单的例子来演示每秒插入一条记录到数据表
  
  

1 USE test;
2   CREATETABLE aaa (timeline TIMESTAMP);
3   CREATEEVENT e_test_insert
4    ONSCHEDULE EVERY 1 SECOND
5    DO INSERTINTO 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表:
  
  

1 CREATE EVENT e_test
2    ONSCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY
3    DO TRUNCATETABLE test.aaa;


  
  3) 2007年7月20日12点整清空test表:
  
  

1 CREATE EVENT e_test
2    ONSCHEDULE AT TIMESTAMP '2007-07-20 12:00:00'
3    DO TRUNCATETABLE test.aaa;


  
  4) 每天定时清空test表:
  
  

1 CREATE EVENT e_test
2    ONSCHEDULE EVERY 1 DAY
3    DO TRUNCATETABLE test.aaa;


  
  5) 5天后开启每天定时清空test表:
  
  

1 CREATE EVENT e_test
2    ONSCHEDULE EVERY 1 DAY
3    STARTS CURRENT_TIMESTAMP+ INTERVAL 5 DAY
4    DO TRUNCATETABLE test.aaa;


  
  6) 每天定时清空test表,5天后停止执行:
  
  

1 CREATE EVENT e_test
2    ONSCHEDULE EVERY 1 DAY
3    ENDS CURRENT_TIMESTAMP+ INTERVAL 5 DAY
4    DO TRUNCATETABLE test.aaa;


  
  7) 5天后开启每天定时清空test表,一个月后停止执行:
  
  

1 CREATE EVENT e_test
2    ONSCHEDULE EVERY 1 DAY
3    STARTS CURRENT_TIMESTAMP+ INTERVAL 5 DAY
4    ENDS CURRENT_TIMESTAMP+ INTERVAL 1 MONTH
5    DO TRUNCATETABLE test.aaa;


  
  [ON COMPLETION [NOT] PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOT PRESERVE。
  8) 每天定时清空test表(只执行一次,任务完成后就终止该事件):
  
  

1 CREATE EVENT e_test
2    ONSCHEDULE EVERY 1 DAY
3    ONCOMPLETION NOT PRESERVE
4    DO TRUNCATETABLE test.aaa;


  
  [ENABLE | DISABLE]可是设置该事件创建后状态是否开启或关闭,默认为ENABLE。
  [COMMENT ‘comment’]可以给该事件加上注释。
  三、修改事件(ALTER EVENT)
  
  

1 ALTER EVENT event_name
2    [ONSCHEDULE schedule]
3    [RENAME TOnew_event_name]
4    [ONCOMPLETION [NOT] PRESERVE]
5    [COMMENT 'comment']
6    [ENABLE | DISABLE]
7    [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;
  注意:如果你将event执行了Alter event event_name disable.那么当你重新启动mysql服务
  器后,该event将被删除(测试版本:5.1.30)
  
  应用案例
  本案例是利用 event scheduler 的特性,每秒钟调用一次存储过程,用于判断 SLAVE 是否正常运行,如果发现 SLAVE 关闭了,忽略 0 次错误,然后重新启动 SLAVE。
  
   * 首先创建存储过程
  
  

01 delimiter //
02    createprocedure `Slave_Monitor`()
03    begin
04    SELECTVARIABLE_VALUE INTO @SLAVE_STATUS
05    FROMinformation_schema.GLOBAL_STATUS
06    WHEREVARIABLE_NAME='SLAVE_RUNNING';
07    IF ('ON'!= @SLAVE_STATUS) THEN
08    SETGLOBAL SQL_SLAVE_SKIP_COUNTER=0;
09    SLAVE START;
10    ENDIF;
11    end; //
12    delimiter ;


  
   由于存储过程中无法调用类似 SHOW SLAVE STATUS 这样的语句,因此无法得到确切的复制错误信息和错误代码,不能进一步的处理 SLAVE 停止的各种情况。
   * 接着,创建任务
  
  

1 CREATE EVENT IFNOT EXISTS `Slave_Monitor`
2    ONSCHEDULE EVERY 5 SECOND
3    ONCOMPLETION PRESERVE
4    DO
5    CALL Slave_Monitor();


  
  
   创建了一个任务,每 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

    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安装mysql5.7yum list installed - grep mysql

    在CentOS7上安装MySQL 5.7是一个常见的任务,特别是在搭建服务器环境时。本文将详细解释如何通过YUM在CentOS7上安装MySQL 5.7.11,并涵盖安装过程中的关键步骤。 首先,我们需要确保系统中没有预装的MySQL。运行`...

    服务器:在树莓派上安装MySQL数据库和简单使用方法 过程详细

    进入MySQL的命令行界面后,你可以创建新的数据库,例如: ```sql CREATE DATABASE mydatabase; ``` 接着,创建新用户并赋予其对数据库的权限: ```sql CREATE USER 'newuser'@'localhost' IDENTIFIED BY '...

    MySQL5.6版本 Linux安装包

    9. **日常管理**:MySQL 5.6的管理操作包括创建数据库、用户、表,备份与恢复数据,以及性能优化等。这些都需要使用SQL语句或者MySQL提供的客户端工具。 10. **性能改进**:MySQL 5.6版本引入了一些性能优化特性,...

    Mysql解压缩版配置向导

    MySQL解压缩版配置向导是针对那些选择不使用安装程序而是直接解压MySQL安装包进行安装的用户提供的指南。这种方式在某些情况下更为灵活,比如在没有权限运行安装程序或者需要自定义配置的情况下。以下是一份详细的...

    ZZ561401.CAB

    ZZ561401.CAB ZZ561401.CAB ZZ561401.CAB

    mysql备份脚本 保留七天

    一个mysql数据备份脚本 可以同时备份多个数据库 可以保留制定天数 比如可以设置只保留近三天的数据

    Zz: java 线程池设计思想

    1. 当任务提交到线程池时,如果当前运行的线程数少于`corePoolSize`,则直接创建新线程执行任务。 2. 如果线程池已达`corePoolSize`,任务会被放入工作队列等待。 3. 当工作队列已满且当前线程数未达到`...

    wincc AX NF ZZ

    wincc SIMATIC WinCC是第一个使用最新的32位技术的过程监视系统,具有良好的开放性和灵活性。 从面市伊始,用户就对SIMATIC WinCC印象深刻。

    MySQL/PHP数据库应用开发指南(PDG)

    实际操作是学习的关键部分,通过编写和调试代码,开发者能更好地理解PHP和MySQL如何协同工作,从而创建出功能丰富的Web应用。 总的来说,《MySQL/PHP数据库应用开发指南》涵盖了从基础的数据库设计到高级的Web应用...

    修复linux a病毒.pdf

    此病毒可能通过创建定时任务、产生僵尸进程以及植入恶意文件等方式对系统造成威胁。以下将详细介绍各步骤中的关键知识点。 ### 一、查看主机的定时任务 #### 知识点1:定时任务(Cron Jobs) 在Linux系统中,定时...

    MySQL面试题(含答案)

    MySQL 是一个 DBMS(数据库管理系统),由瑞典MySQLAB 公司开发,目前属于 Oracle 公司,MySQL是最流行的关系型数据库管理系统(关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来...

    MySQL 8.0.15 安装版WIN32位

    MySQL 8.0.15 Windows 32位,安装版的百度云盘链接!教程可查看我的博文,超级适合小白,虽然安装过程稍微步骤多,但免安装版本的“服务无法启动”更让人绝望啊!

    超出NLO QCD的高横向动量的ZZ产生

    我们研究了四轻子最终状态ℓ+ℓ-ℓ+ℓ-的产生,这些状态主要由一对弱电Z玻色子ZZ产生。 使用LoopSim方法,我们合并ZZ和ZZ + jet的NLO QCD结果,并获得ZZ产生的近似NNLO预测。 还包括对ZZ过程的精确胶子融合环平方的...

    zz CAD快速计算长度插件

    在CAD中想要快速测量长度,在CAD工具栏找到加载应用程序,再点击加载 加载成功后在输入栏输入“zz”(不分大小写)在选择你需要测量的线段即可。

    ZZ-2022004 建筑CAD赛项赛题.zip

    ZZ-2022004 建筑CAD赛项赛题 中职赛项 适合正在准备技能大赛的人群

    JDBC 连接mysql的一种方法,使用JAVA语言

    首先,确保你已经安装了MySQL数据库服务器,比如使用XAMPP,它包含了MySQL、Apache等服务。XAMPP简化了本地开发环境的搭建,包括MySQL数据库的启动和管理。 在Eclipse这样的集成开发环境中,你需要创建一个新的Java...

    mysql高级导图-zzyy.rar

    这个是我找了2个小时,浪费了150积分才找到的,为了让我们这些java爱好者,少走弯路,我把他分享出来,https://blog.csdn.net/weixin_39845780/article/details/116642786 或者你也可以直接在这里下载

    Apache+Php+Mysql在Windows下配置

    Apache、PHP和MySQL是互联网开发中的重要组成部分,它们在Windows操作系统上的配置对于许多开发者来说是一项基础任务。Apache作为流行的Web服务器,PHP是一种广泛使用的服务器端脚本语言,而MySQL则是功能强大的关系...

    中医大夫助理信息系统 zz-doctor

    Activity是用户界面的主要构成部分,Service用于后台运行任务,BroadcastReceiver处理系统广播事件,而ContentProvider则负责数据的存储与共享。了解并熟练掌握这些组件的用法,对于构建功能完善的Android应用至关...

Global site tag (gtag.js) - Google Analytics