mysql 作业 每天执行_mysql定时任务/mysql作业

实现方式:

第一种是利用Mysql本身实现,制定event定时任务,可以借助Navicat For Mysql或其他数据库开发工具去做;

第二种实现方式是利用linux的定时任务,这个是利用Linux系统自带任务管理工具实现的。

一、Mysql中event定时任务的相关命令

1.查看event是否启用:

1

2

3

SELECT @@event_scheduler;

SHOW VARIABLESLIKE 'event%';

2.开启定时任务:

1

2

3

set GLOBAL event_scheduler = 1;

SET GLOBAL event_scheduler =ON;

3.建立定时任务:(如果报错,删掉begin end即可)

1

2

3

4

5

6

7

8

9

DROP EVENT IF EXISTS JOB_ALARM;

CREATE EVENT JOB_ALARM

ON SCHEDULE EVERY 10MINUTE

DO

BEGIN

if(date_format(current_time(),'%H')>22 || date_format(current_time(),'%H')<5)THEN

CALL PRO_ALARM();

END IF;

END

4.建立存储过程:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

DROP PROCEDURE IF EXISTS PRO_ALARM;

CREATE PROCEDURE PRO_ALARM()

BEGIN

DECLARE userIdVARCHAR(32);

#这个用于处理游标到达最后一行的情况

DECLARE sINT DEFAULT 0;

#声明游标cursor_name(cursor_name是个多行结果集)

DECLARE cursor_dataCURSOR FOR

SELECT tmp.USER_ID

FROM (

SELECT

e.USER_ID,

MAX(e.TIME_GMT) TIME_GMT

FROM EVENTS e

GROUP BY e.USER_ID

HAVING MAX(e.TIME_GMT) < UNIX_TIMESTAMP() - 60 * 30

AND MAX(e.TIME_GMT) > UNIX_TIMESTAMP() - 60 * 60 * 24) tmp

INNER JOIN EVENTS tON tmp.USER_ID = t.USER_ID

AND tmp.TIME_GMT = t.TIME_GMT

WHERE TYPE_ID !='34001';

#设置一个终止标记

DECLARE CONTINUE HANDLERFOR SQLSTATE'02000' SET s = 1;

OPEN cursor_data;

#获取游标当前指针的记录,读取一行数据并传给变量a,b

FETCH cursor_data

INTO userId;

#开始循环,判断是否游标已经到达了最后作为循环条件

WHILE s <> 1 DO

INSERT INTO EVENTS_NOTIFICATIONVALUES (NULL, SYSDATE(), UNIX_TIMESTAMP(SYSDATE()),

UNIX_TIMESTAMP(SYSDATE()),'00000', userId,'1','0');

#读取下一行的数据

FETCH cursor_data

INTO userId;

END WHILE;

#关闭游标

CLOSE cursor_data;

END;

二、利用linux的定时任务

linux定时任务基本命令:

查看定时任务:crontab -l

编辑定时任务:crontab -e

*/10 22-23,0-5 * * *   mysql -u用户名 -p密码 -e "use db_name;CALL PRO_ALARM();"

或者把use db_name;CALL PRO_ALARM();存到sql脚本中,编辑定时任务如下:

*/10 22-23,0-5 * * *   mysql -u用户名 -p密码 < /application/Job_mysql.sql

三、Mysql Event 调度历史记录

目前的mysql版本没有Event执行历史信息,为方便查看Event是否正常执行以及执行结果,可以通过以下两个步骤来实现:

【3.1】创建作业执行Event历史记录表

CREATE TABLE `mysql`.`t_event_history` (

`dbname` VARCHAR(128) NOT NULL DEFAULT '',

`eventname` VARCHAR(128) NOT NULL DEFAULT '',

`starttime` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',

`endtime` DATETIME DEFAULT NULL,

`issuccess` INT(11) DEFAULT NULL,

`duration` INT(11) DEFAULT NULL,

`errormessage` VARCHAR(512) DEFAULT NULL,

`randno` INT(11) DEFAULT NULL,

PRIMARY KEY (`dbname`,`eventname`,`starttime`),

KEY `ix_endtime` (`endtime`),

KEY `ix_starttime_randno` (`starttime`,`randno`)

) ENGINE=INNODB DEFAULT CHARSET=utf8;

【3.2】根据以下建模板创建作业

#请注意根据实际情况修改相关信息

DELIMITER $$

CREATE DEFINER=`root`@`localhost` EVENT `e_test` ON SCHEDULE

#修改以下调度信息

EVERY 1 DAY STARTS '2014-01-03 01:00:00' ON COMPLETION PRESERVE ENABLE DO

BEGIN

DECLARE r_code CHAR(5) DEFAULT '';

DECLARE r_msg TEXT;

DECLARE v_error INTEGER;

DECLARE v_starttime DATETIME DEFAULT NOW();

DECLARE v_randno INTEGER DEFAULT FLOOR(RAND()*100001);

INSERT INTO mysql.t_event_history (dbname,eventname,starttime,randno)

#修改下面的作业名(该作业的名称)

VALUES(DATABASE(),'e_test', v_starttime,v_randno);

BEGIN

#异常处理段

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION

BEGIN

SET v_error = 1;

GET DIAGNOSTICS CONDITION 1 r_code = RETURNED_SQLSTATE , r_msg = MESSAGE_TEXT;

END;

#此处为实际调用的用户程序过程

CALL test.usp_test1();

END;

UPDATE mysql.t_event_history SET endtime=NOW(),issuccess=ISNULL(v_error),duration=TIMESTAMPDIFF(SECOND,starttime,NOW()),

errormessage=CONCAT('error=',r_code,', message=',r_msg),randno=NULL WHERE starttime=v_starttime AND randno=v_randno;

END$$

DELIMITER ;

通过查询mysql.t_event_history表,我们就知道event何时执行,执行是否成功,执行时长,出错时的错误信息,为管理我们日常调度计划提供很大方便。

您可能感兴趣的文章:

mysql定时任务简单例子

mysql定时任务简单例子 ? 1 2 3 4 5 6 7 8 9     如果要每30秒执行以下语句:   [sql] update userinfo set endtime = now() WHE ...

MySql&#160;定时任务的使用

MySql 定时任务的使用 by:授客 QQ:1033553122 简介 自 MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定 ...

MySql&#160;利用crontab实现MySql定时任务

MySql 利用crontab实现MySql定时任务 by:授客 QQ:1033553122 适用平台 任意myslq版本数据库 操作方法 登陆到数据库系统所在的linxu系统 第一步:新建名为cro ...

数据库MySQL(课下作业,必做)

数据库MySQL(课下作业,必做) 题目要求: 下载附件中的world.sql.zip, 参考http://www.cnblogs.com/rocedu/p/6371315.html#SECDB,导入 ...

mysql 定时任务job

mysql 定时任务job 1.通过show EVENTS显示当前定义的事件 2.检查event_scheduler状态:SHOW VARIABLES LIKE 'event_scheduler' 3 ...

mysql 定时任务和存储过程

mysql 定时任务和存储过程 最近在做日志系统,中间用到了 mysql, 其中有一个要求: 把数据库中 7天之后的日志清除了.看到 mysql 也支持 定时任务.于是就用 mysql 来做了.下面就 ...

20175221 曾祥杰 数据库MySQL(课下作业,必做)

数据库MySQL(课下作业,必做) 题目要求: 1. 下载附件中的world.sql.zip, 参考http://www.cnblogs.com/rocedu/p/6371315.html#SECDB ...

mysql定时任务(数据库管理工具and 纯命令行)

1.工具:Navicat 2.通过下列语句l爱查询event是否开启 打开Navicat命令列界面(点击工具可以看到或按F6) 输入下面命令 show variables like '%sche%'; ...

MySQL定时任务event,储存过程(定时删除指定时间前90天指定表的数据)

MySQL定时任务event,储存过程(定时删除指定时间前90天指定表的数据) 分类: MySql5.x2014-06-23 15:16 1266人阅读 评论(0) 收藏 举报 mysql数据库 &l ...

随机推荐

bash小技巧

Linux 下shell基本上默认是 bash, 下面是我总结的一些技巧. &  后台运行程序 ,注意退出当前shell后 程序也会退出()   使用子shell, 比如 (cd ../../ ...

如何创建一个客户端回调:js获得服务端的内容?

答案:表面上看去就是前端的js调用服务的C#方法,本质就是ajax,通过XMLHttpRequest对象和服务端进行交互.回调:就说回过头来调用,按理说js是一种脚本语言,怎么能用来调用服务端的呢?就 ...

修改 myeclipse8.5 servlet 模板

在myeclipse8.5的安装目录下找到 \Common\plugins下的com.genuitec.eclipse.wizards_8.5.0.zmyeclipse75020090612.jar ...

HDU2196 - Computer(树形DP)

题目大意 给定一颗n个结点的树,编号为1~n,要求你求出每个结点能到达的最长路径 题解 用动态规划解决的~~~~把1 当成树根,这样就转换成有根树了.我们可以发现,对于每个结点的最长路,要么是从子树得 ...

VS中使用sqlite静态连接

说明 最近写的文章有些多,懒得打字了,就直接上文章.这里说明一下,我说的是VS,不是指定的哪一个VS版本.先下载官方的源文件:sqlite-amalgamation-3071502.zip 下载下来的 ...

WPF命中测试示例(二)——几何区域命中测试

原文:WPF命中测试示例(二)--几何区域命中测试 接续上次的命中测试,这次来做几何区域测试示例. 示例 首先新建一个WPF项目,在主界面中拖入一个按钮控件,并修改代码中的以下高亮位置: 当前设计视图 ...

一步步学习操作系统(2)——在STM32上实现一个可动态加载kernel的";my-boot";

如果要做嵌入式Linux,我们首先要在板子上烧写的往往不是kernel,而是u-boot,这时需要烧写工具帮忙.当u-boot烧写成功后,我们就可以用u-boot附带的网络功能来烧写kernel了.每 ...

nginx 配置入门

之前的nginx配置是对nginx配置文件的具体含义进行讲解,不过对于nginx的新手可能一头雾水. 今天看到个文档不错,翻译过来分享给大家,可以让新手更详细地了解nginx配置,可以说是nginx配 ...

COM学习(四)——COM中的数据类型

上一次说到,COM为了跨语言,有一套完整的规则,只要COM组件按照规则编写,而不同的语言也按照对应的规则调用,那么就可以实现不同语言间相互调用.但是根据那套规则,只能识别接口,并调用没有参数和返回类型 ...

Oracle中和mysql中函数的区别

oracle                  -->                 mysqlto_char(sysdate,'yyyy-mm-dd')-->date_format(s ...

你可能感兴趣的:(mysql,作业,每天执行)