1、说明
- 后台周期定时任务能够有多种解决方案,我所知道的大概有如下几种:
- 后台框架自带定时任务。好比php中的Laravel框架里有提供定时任务操做接口,其余的框架你们能够单独针对了解。
- 服务器操做系统层面的定时。一般咱们的服务器主要基于两大平台,一个windows server,它的定时任务系统有提供的。Linux下也有,一般流行的是crontab工具实现的(想了解这里有个视频教程),可是crontab的定时任务一般定时操做脚本这样的文件,而直接定时操做数据库的就比较麻烦了。可是也有解决办法,就是在服务器端写一个get请求url,在后台里完成要定时完成的数据库操做,这样咱们只要实现定时访问该接口就好了,Linux下的curl命令能够很方便发出get请求,咱们只要写个包含访问该接口的脚本,再结合crontab就能够完成后台数据的定时更新操做了。
- 可是毕竟写个接口安全性不是过高,而你们用的若是是mysql数据库,那就正好能够利用其自带的定时操做了,下面简单介绍mysql定时操做的使用。
2、mysql定时操做
一、查看定时策略是否开启
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标签下
|
二、建立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 herephp
-
上面的代码说明:mysql
- use test; 这个谁都知道,使用某个数据库,这里要强调的是存储过程必定是对于某个数据库而言的,因此必需要选中一个数据库才能建立成功。
- delimiter // 这个是将mysql中以;(分号)结尾的规定修改成以//(双斜杠)为语句结束符,由于存储过程里能够有多条sql 语句,里面的sql语句都以;号结尾,若是回车了那么系统会当作sql语句直接执行了,咱们但愿的是先定义这一系列sql语句而先不执行,因此要改下操做结束符。固然你在改后必定要改回来,你们能够看到最后一行有对应的修改回来的语句。
-
下面的是一块儿输入的,能够知道分别是建立存储过程test_proce(),名称能够随便起的,而后是在begin –end之间是定义一系列sql语句的就能够了,记住最后end结尾要以以前修改后的结尾符结束。git
1 2 3 4
|
create procedure test_proce() begin insert into weuse(name,created_at,updated_at) values('hello',now(),now()); end//
|
三、建立定时任务
上面建立存储过程其实是为定时任务作铺垫的,由于上面只说明了怎么建立存储过程,可是未说明怎么调用,那这里就用到了调用存储过程了。github
建立定时任务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 heresql
- 代码说明:
- 上面为总体代码,敲完再写分号
- 第一行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数据库
四、开启已经建立好的event(事件)
1 2
|
alter event second_event on completion preserve enable;//开启定时任务 alter event second_event on completion preserve disable;//关闭定时任务
|
- 当咱们用第一句命令开启定时任务时,能够就能够查看数据库状况,已经实现了每秒钟执行一次了,如图。
enter image description herewindows
- 要想关闭定时任务只要执行上面的第二句命令,关闭须要关闭的定时任务就能够了。
五、常见周期定时规则
-
周期执行–关键字 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天
|
六、效率工具
MysqlWorkBench
是官方推荐的免费可视化mysql操做工具,方便建模,ER图操做,经我发现好像只能可视化操做存储过程(也多是本身没找到)
enter image description here
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/