Mysql中的定时任务

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

一、说明

  • 后台周期定时任务可以有多种解决方案,我所知道的大概有以下几种:

    1. 后台框架自带定时任务。比如php中的Laravel框架里有提供定时任务操作接口,其他的框架大家可以单独针对了解。

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

    3. 但是毕竟写个接口安全性不是太高,而大家用的如果是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 hereenter image description here

  • 上面的代码说明:

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

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

    3. 下面的是一起输入的,可以知道分别是创建存储过程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 hereenter image description here

  • 代码说明:

    1. 上面为整体代码,敲完再写分号

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

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

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

    5. 第四行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 hereenter 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 hereenter image description here

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

5、常见周期定时规则


  • 周期执行–关键字 EVERY

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

    2. 如:

      1
      2
      3
      on schedule every 1 second //每秒执行1次
      on schedule every 2 minute //每两分钟执行1次
      on schedule every 3 day //每3天执行1次
  • 在具体某个时间执行–关键字 AT

    1. 如:

      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. 如:

      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 hereenter 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 hereenter image description here

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

enter image description here

 

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

即使只是凡世中一颗小小的尘埃,命运也要由自己主宰,像向日葵般,迎向阳光、勇敢盛开

作者: admin

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam viverra euismod odio, gravida pellentesque urna varius vitae. Sed dui lorem, adipiscing in adipiscing et, interdum nec metus. Mauris ultricies, justo eu convallis placerat, felis enim ornare nisi vitae.

为您推荐

联系我们

联系我们

返回顶部