使用MySQL计划任务

原创 2008年11月06日 11:03:00
原先,LAMP的程序员为了完成一些周期性的数据库操作任务,总是不得不借助于操作系统的帮助,比如Windows的计划任务,或者Linux的contab。MySQL5.1终于新增了Event Scheduler功能,可以直接在后台实现一下定时性的作业。但不知道什么原因,在英文版的参考手册中,位于触发器和视图之间的第20章Event Scheduler,在中文版中被删减掉了,手册的其他部分也没有丝毫提到它,好像它根本就不存在一样,所以它的知名度不是很高。有兴趣的读者可以参考http://dev.mysql.com/doc/refman/5.1/en/events.html获得比较完整的帮助。

1.1 开启
     MySQL的Event Scheduler是根据预先安排的计划进行数据库操作的数据库对象,可以看作是一种“时间触发器”。Event实际上是被一个特殊的event scheduler线程执行的,假如它正在运行的话,可以通过SHOW PROCESSLIST命令看到它。全局变量event_scheduler用来设定是否服务器端运行执行计划任务,该变量有如下三种值:
      OFF:计划任务处于停止状态,event scheduler线程没有运行。是event_scheduler的默认值;
      ON:计划任务处于运行状态,event scheduler线程启动,并执行所有的计划任务;
      DISABLED:该值将致使计划任务不可运行
     你可以使用下列的任意一句开启计划任务:
           SET GLOBAL event_scheduler = ON;
           SET @@global.event_scheduler = ON;
           SET GLOBAL event_scheduler = 1;
           SET @@global.event_scheduler = 1;

1.2 创建
     Event Scheduler作为一种数据库对象,其增删改的DDL语句与其他对象非常相似,无非CREATE、ALTER、DROP等,创建的基本语法是:
          CREATE EVENT        (1)
          [IF NOT EXISTS]        (2)
          event_name         (3)
          ON SCHEDULE schedule      (4)
          [ON COMPLETION [NOT] PRESERVE]   (5)
          [ENABLE | DISABLE]       (6)
          [COMMENT 'comment']       (7)
          DO sql_statement        (8)
     逐条介绍:
     (1) 创建Event嘛,这俩关键字当然不能少了
     (2) 如果不存在同名的数据库对象才创建
     (3) 计划任务的名字。作为数据库对象,都有一个本库内唯一的名字做标识
     (4) 计划任务的计划,重点就在这儿。有两个关键字来设定任务的执行计划:AT和EVERY:
          AT指定的是一个一次性计划,后面跟着一个时间戳,后续的sql语句将在指定的时间被执行一次;
          EVERY指定的是一个周期性计划,在该子句中可以指定从某时间点到某时间点期间,每隔某周期就执行一次该任务。
     (5) 任务整个执行完毕后,该计划任务对象是否还在数据库中保留。默认不保留
     (6) 有效或失效。默认有效
     (7) 真正要执行的语句

1.3 实例
      首先是一个一次性计划任务的例子,该任务在指定的2008-02-06 23:59:00这个时间点,向messages表中插入一条记录:
          CREATE EVENT e_totals
          ON SCHEDULE AT '2006-02-10 23:59:00'
          DO
          INSERT INTO messages VALUES (null, 'admin', '过年了!', '祝大家鼠年发大财!!!', '127.0.0.1',NOW());
      下面是一个周期性计划任务的例子,该任务在2008-02-06 23:59:00开始的一年内,每隔1小时就删除掉messages表的早先的10条记录:
          CREATE EVENT e_hourly
          ON SCHEDULE
          EVERY 1 HOUR STARTS '2007-02-10 23:59:00' ENDS '2008-02-10 23:59:00'
          DO
          DELETE FROM messages limit 10;

     计划任务属于数据库服务器端的对象,创建好后,只要开启了event_scheduler,就可以自动触发执行了,不用在前台进行任何干预。当然一定要记住,只有MySQL5.1以上版本才支持该对象。

Create event e_test on schedule every 24 hour do

Insert into table1(..) select … from table2 where pdate < DATE_FORMAT(now(), ‘%Y-%m-%d’);

用Navicat 计划任务备份mysql数据库

需要对mysql数据库进行每日备份
  • zhouyingge1104
  • zhouyingge1104
  • 2014年05月29日 11:24
  • 12229

Mysql计划任务自动定时备份数据库方法-for windows

数据库名称为:952game数据库备份目的地:d:\db_bak\ (你想把数据库备份到哪个盘的路径)我想备到D盘的db-bak目录下面============================新建db...
  • xmlife
  • xmlife
  • 2016年07月29日 20:11
  • 1824

mysql5.0 执行定时计划-Window系统

由于在mysql5.1之后才支持定时计划功能 event_shecdule,之前的版本就需要使用操作系统的定时计划来调用脚本实现对mysql数据库的更改。 在windows下使用windows的定时...
  • jbjwpzyl3611421
  • jbjwpzyl3611421
  • 2013年12月18日 09:01
  • 2321

使用linux计划任务自动拉起停止的通达OA服务apache和mysql服务

概述: 数据库或web服务器瞬时并发过大时,可能面临宕机的危险,用类似开门狗的程序自动监控程序是否正常运行,在服务停止时自动启动服务,可临时解决该问题 监控apache服务的脚...
  • reblue520
  • reblue520
  • 2015年11月24日 12:04
  • 1044

MySQL触发器和Windows计划任务结合使用达到定时触发的效果

最近做的一个项目中
  • Prince_WCS
  • Prince_WCS
  • 2014年05月20日 19:30
  • 1404

使用计划任务提权到SYSTEM用户

  • 2012年11月17日 16:21
  • 5KB
  • 下载

mysql计划任务:event schedule 收藏

mysql的event schedule 可以让你设置你的mysql数据库再某段时间执行你想要的动作 这与视图是不相同的。 create event test1 on schedule ever...
  • mimixikou
  • mimixikou
  • 2011年09月13日 14:54
  • 275

MysQL windows 下自动备份,同时加入计划任务脚本

实现的特性  可指定多个数据库  按照 年/月/日 的方式组织备份  可选的使用 WinRAR 压缩备份  使用计划任务实现定时备份  具体代码  备份  @echo off & s...
  • fuli_mouren
  • fuli_mouren
  • 2013年05月28日 16:11
  • 1486

用Navicat 计划任务备份mysql数据库

转自:http://blog.csdn.net/zhouyingge1104/article/details/27498497,我还发现另外一个备份windows下文件夹的软件:FreeFileSyn...
  • omayyouhappy
  • omayyouhappy
  • 2017年10月25日 10:05
  • 250

MySQL计划任务(事件调度器)(Event Scheduler)

MySQL5.1.x版本中引入了一项新特性EVENT,顾名思义就是事件、定时任务机制,在指定的时间单元内执行特定的任务,因此今后一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。 ...
  • xiazetong
  • xiazetong
  • 2013年06月17日 17:27
  • 371
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用MySQL计划任务
举报原因:
原因补充:

(最多只允许输入30个字)