使用MySQL计划任务
2013-12-02 14:51
225 查看
【转载】使用MySQL计划任务
原先,LAMP的程序员为了完成一些周期性的数据库操作任务,总是不得不借助于操作系统的帮助,比如Windows的计划任务,或者Linux的contab。MySQL5.1终于新增了Event Scheduler功能,可以直接在后台实现一下定时性的作业。但不知道什么原因,在英文版的参考手册中,位于触发器和视图之间的第20章EventScheduler,在中文版中被删减掉了,手册的其他部分也没有丝毫提到它,好像它根本就不存在一样,所以它的知名度不是很高。有兴趣的读者可以参考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以上版本才支持该对象。
相关文章推荐
- 【mysql】备份篇1:使用系统计划任务+mysqldump 定时备份mysql数据库 不用输入密码自动导出sql文件
- 使用MySQL计划任务
- MySQL触发器和Windows计划任务结合使用达到定时触发的效果
- 使用MySQL计划任务
- 使用linux计划任务自动拉起停止的通达OA服务apache和mysql服务
- 使用MySQL计划任务 二
- 使用linux计划任务自动拉起停止的通达OA服务apache和mysql服务
- mysql的计划任务
- windows 计划任务的使用 php脚本的使用
- 在Spring中使用注解(@Scheduled)创建计划任务
- [windows的计划任务][转贴]让php定时运行备份mysql!
- MySQL Event计划任务刷慢日志
- 在Spring3中使用注解(@Scheduled)创建计划任务
- 使用任务计划程序添加计划任务
- 我的服务器开发之路-windows计划任务的使用
- 计划任务:不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接。中断与此服务器或共享资源的连接,然后在试一次
- mysql计划任务
- MySQL定时执行脚本(计划任务)命令实例
- java计划任务quartz使用
- Mysql:语法:存储程序(存储过程、存储函数、视图、触发器、计划任务)