Chinaunix首页 | 论坛 | 博客
  • 博客访问: 178711
  • 博文数量: 134
  • 博客积分: 1215
  • 博客等级: 少尉
  • 技术积分: 564
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-20 11:04
文章分类

全部博文(134)

文章存档

2017年(88)

2012年(46)

我的朋友

分类: Mysql/postgreSQL

2017-04-14 10:51:06

原文地址:MySQL 计划任务 作者:鸟哥のlinux

5.1以上版本支持,先查看数据库是否开启计划认为:

mysql> show variables like ‘%%’;
+———————+——-+
| Variable_name   | Value |
+———————+——-+
| event_scheduler | OFF  |
+———————+——-+

 

使用下列的任意一句开启
SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = ON;
SET GLOBAL event_scheduler = 1;   — 0代表关闭
SET @@global.event_scheduler = 1;

 

创建event语法:
CREATE EVENT [ IF NOT EXISTS ] event_name
ON SCHEDULE AT|EVERY
[ ON COMPLETION [ NOT ] PRESERVE ]
[ ENABLED | DISABLED ]        –状态,默认是有效状态。
[ COMMENT 'comment' ]         –注释说明
DO sql_statement;

 

主要功能说明:
AT 表示指定一个时间只执行一次。
EVERY 周期性计划,可指定计划开始时间 STARTS 和结束时间 ENDS,执行具体时间周期可以为:YEAR, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND。
COMPLETION 完毕后,该计划任务对象是否还在数据库中保留。默认不保留。

 

实例0:
每5分钟删除sms表上面ybmid为空白且createdate距现时间超过5分钟的数据。
USE test;
CREATE EVENT event_delnull
ON SCHEDULE
EVERY 5 MINUTE STARTS ’2010-07-10 00:00:00′ ENDS ’2011-02-10 00:00:00′
DO
DELETE FROM sms WHERE ybmid=” AND TIMEDIFF(SYSDATE(),createdate)>’00:05:00′;

 实例1:

每天调用存储过程一次:

mysql> delimiter //

mysql> create event updatePTOonSunday
    -> on schedule every 1 day
-> do
-> call updatePTO();
-> //
Query OK, 0 rows affected (0.02 sec)

这里updatePTO()是我数据库里自定义的存储过程

 

查看任务计划:
SELECT * FROM mysql.event\G

 

 

 

更改计划任务
语法:
ALTER EVENT
[DEFINER = { user | CURRENT_USER }] #更改缺省用户
event_name
[ON SCHEDULE schedule]          #更改调度时间
[RENAME TO new_event_name]          #计划任务改名
[ON COMPLETION [NOT] PRESERVE]      #更改一次运行结束后的行为
[ENABLE | DISABLE | SLAVESIDE_DISABLED] #更改计划任务状态
[COMMENT 'comment']               #修改注释
[DO sql_statement]                     #修改计划执行体

三、删除计划任务
语法:
DROP EVENT [IF EXISTS] event_name
四、开启计划任务功能支持
中对计划任务的支持是采用线程调度检测计划任务的。要此功能开启计划任务才会执行。查看调度器状态命令如下:
SHOW [FULL] PROCESSLIST\G
如下是没有开启的状态:
mysql> SHOW FULL PROCESSLIST\G
*************************** 1. row ***************************
Id: 10
User: root
Host: localhost:4823
db: mysql
Command: Query
Time: 0
State: NULL
Info: SHOW FULL PROCESSLIST
1 row in set (0.00 sec)

通过如下全局配置的设置来开启或关闭调度器:
SET GLOBAL event_scheduler = ON/OFF/1/0; –开/关
或SET @@global.event_scheduler = ON/OFF/1/0;

五、示例如下:
其中计划任务体内可以是简单语句,也可以调用存储过程

delimiter //
drop event if exists createmonsterevent//
create event createmonsterevent
on schedule every 20 minute
starts CURRENT_TIMESTAMP + INTERVAL 10 minute
ENABLE
COMMENT ‘刷怪计划任务’
DO
begin
#20分钟
Call createmonster(date_sub(sysdate(),INTERVAL 24 minute),
date_sub(sysdate(),INTERVAL 2 minute));
end;
//

delimiter ;

阅读(1247) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~