mysql的每隔1分钟定时_Mysql中的定时任务

一、说明

后台周期定时任务可以有多种解决方案,我所知道的大概有以下几种:后台框架自带定时任务。比如php中的Laravel框架里有提供定时任务操作接口,其他的框架大家可以单独针对了解。

服务器操作系统层面的定时。通常我们的服务器主要基于两大平台,一个windows server,它的定时任务系统有提供的。Linux下也有,通常流行的是crontab工具实现的(想了解这里有个视频教程),但是crontab的定时任务通常定时操作脚本这样的文件,而直接定时操作数据库的就比较麻烦了。但是也有解决办法,就是在服务器端写一个get请求url,在后台里完成要定时完成的数据库操作,这样我们只要实现定时访问该接口就行了,Linux下的curl命令可以很方便发出get请求,我们只要写个包含访问该接口的脚本,再结合crontab就可以完成后台数据的定时更新操作了。

但是毕竟写个接口安全性不是太高,而大家用的如果是mysql数据库,那就正好可以利用其自带的定时操作了,下面简单介绍mysql定时操作的使用。

二、mysql定时操作

1、查看定时策略是否开启

查看命令

1

show variables like '%event_sche%';

显示的event_scheduler为OFF时用以下命令开启

1

set global event_scheduler=1;

注意:以上的改法在数据库重启后将会恢复为原来状态,要想数据库重启后也可以让event_scheduler开启,则需要在配置文件my.ini的设置。修改如下,然后重启mysql服务即可。

1

2

[mysqld]

event_scheduler=ON //这一行加入mysqld标签下

2、创建procedure(存储过程)

什么是procedure(存储过程)?

存储过程?当我听到这个词的时候,以为它是mysql存储数据的一个流程而不是一个名词,但是当我网上了解时,才知道这个词是翻译过来的,原生词为Procedure,实际上它的含义就是相当于我们面向对象里的方法或者说是函数,在它里面可以完成多个sql语句的操作,并且可以定义参数传值等,与一般的单条sql语句的区别主要在这里。

详细了解: 点我

创建存储过程

1

2

3

4

5

6

7

use test;

delimiter //

create procedure test_proce()

begin

insert into weuse(name,created_at,updated_at) values('hello',now(),now());

end//

delimiter ;

enter image description here

上面的代码说明:

use test; 这个谁都知道,使用某个数据库,这里要强调的是存储过程一定是对于某个数据库而言的,所以必须要选中一个数据库才能创建成功。

delimiter // 这个是将mysql中以;(分号)结尾的规定修改为以//(双斜杠)为语句结束符,因为存储过程里可以有多条sql 语句,里面的sql语句都以;号结尾,如果回车了那么系统会当做sql语句直接执行了,我们希望的是先定义这一系列sql语句而先不执行,所以要改下操作结束符。当然你在改后一定要改回来,大家可以看到最后一行有对应的修改回来的语句。

下面的是一起输入的,可以知道分别是创建存储过程test_proce(),名称可以随便起的,然后是在begin –end之间是定义一系列sql语句的就可以了,记住最后end结尾要以之前修改后的结尾符结束。

1

2

3

4

create procedure test_proce()

begin

insert into weuse(name,created_at,updated_at) values('hello',now(),now());

end//

3、创建定时任务

上面创建存储过程实际上是为定时任务做铺垫的,因为上面只说明了怎么创建存储过程,但是未说明怎么调用,那这里就用到了调用存储过程了。

创建定时任务event(事件)

1

2

3

4

create event second_event

on schedule every 1 second

on completion preserve disable

do call test_proce();

enter image description here

代码说明:上面为整体代码,敲完再写分号

第一行create event day_event是创建名为second_event的事件,注意此处没有括号

第二行是创建周期定时的规则,本处的意思是每秒钟执行一次

第三行on completion preserve disable是表示创建后并不开始生效。

第四行do call test_proce()是该event(事件)的操作内容,表示调用我们刚刚创建的test_proce()存储过程。

查看定时任务event(事件),可以查看本机所有的事件

1

SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS;

enter image description here

4、开启已经创建好的event(事件)

1

2

alter event second_event on completion preserve enable;//开启定时任务

alter event second_event on completion preserve disable;//关闭定时任务

当我们用第一句命令开启定时任务时,可以就可以查看数据库情况,已经实现了每秒钟执行一次了,如图。

enter image description here

要想关闭定时任务只要执行上面的第二句命令,关闭需要关闭的定时任务就可以了。

5、常见周期定时规则

周期执行–关键字 EVERY

单位有:second,minute,hour,day,week(周),quarter(季度),month,year

如:

1

2

3

on schedule every 1 second //每秒执行1次

on schedule every 2 minute //每两分钟执行1次

on schedule every 3 day //每3天执行1次

在具体某个时间执行–关键字 AT

如:

1

2

3

on schedule at current_timestamp()+interval 5 day //5天后执行

on schedule at current_timestamp()+interval 10 minute //10分钟后执行

on schedule at '2016-10-01 21:50:00' //在2016年10月1日,晚上9点50执行

在某个时间段执行–关键字STARTS ENDS

如:

1

2

on schedule every 1 day starts current_timestamp()+interval 5 day ends current_timestamp()+interval 1 month //5天后开始每天都执行执行到下个月底

on schedule every 1 day ends current_timestamp()+interval 5 day //从现在起每天执行,执行5天

6、效率工具

MysqlWorkBench

是官方推荐的免费可视化mysql操作工具,方便建模,ER图操作,经我发现好像只能可视化操作存储过程(也可能是自己没找到)

存储过程:

enter image description here

Event事件,可以查看,用sql命令

1

2

SELECT * FROM information_schema.EVENTS;//查看所有事件属性

SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS;//查看主要几个属性

enter image description here

Navicat

这个是收费的软件,但是可视化操作比较轻量级,功能也很多,它可以可视化操作存储过程和Event事件,详细操作大家可以自己摸索啊!!

来源于:http://jiyiren.github.io/2016/03/27/Mysql_schedule/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值