转自:jiyiren 的《MySQL 中的定时任务》

原址:http://jiyiren.github.io/2016/03/27/Mysql_schedule/

MySQL 中的定时任务

发表于 2016-03-27 | 分类于 MySQL | 评论数: 4 | 阅读次数: 3644

MySQL 5 开启定时任务

最近项目里面的后台需要用到定时任务,而 MySQL5.0 开始自带了定时事件操作,所以学习下并做下记录。

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

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

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

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

MySQL 配置

查看定时策略是否开启,查看命令:

show variables like '%event_sche%';

显示的 event_schedulerOFF 时用以下命令开启:

set global event_scheduler=1;

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

[mysqld]

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

创建 procedure ( 存储过程 )


什么是 procedure ( 存储过程 ) ?

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

创建存储过程

先上一段创建存储过程代码:

use test;

delimiter //

create procedure test_proce()

begin

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

end//

delimiter ;

上面的代码说明:

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

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

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

create procedure test_proce()

begin

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

end//

创建定时任务


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

创建定时任务 event ( 事件 )

依旧先上创建定时任务事件代码:

create event second_event

on schedule every 1 second

on completion preserve disable

do call test_proce();

代码说明:

  1. 上面为整体代码,敲完再写分号;
  2. 第一行 create event day_event 是创建名为 second_event 的事件,注意此处没有括号;
  3. 第二行是创建周期定时的规则,本处的意思是每秒钟执行一次;
  4. 第三行 on completion preserve disable 是表示创建后并不开始生效;
  5. 第四行 do call test_proce() 是该 event(事件) 的操作内容,表示调用我们刚刚创建的 test_proce() 存储过程。

查看定时任务 event ( 事件 )

查看本机所有的事件:

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

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

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

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

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

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

常见周期定时规则

① 周期执行 – 关键字 EVERY

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

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

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

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

② 在具体某个时间执行 – 关键字 AT, 如:

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

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 图操作,经我发现好像只能可视化操作存储过程,没看到有定时任务的 ( 也可能是自己没找到 )。

存储过程示例如下:

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

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

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

Navicat

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

  • 本文作者: jiyiren
  • 本文链接: http://yoursite.com/2016/03/27/Mysql_schedule/
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

MySQL 中的定时任务相关推荐

  1. mysql中如何设置定时任务_mysql如何实现设置定时任务 mysql实现设置定时任务方法...

    本篇文章小编给大家分享一下mysql实现设置定时任务方法,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 1.首先检查是否开启了定时任务 查看event是否开启 : SHOW ...

  2. quartz mysql索引_分布式系统中的定时任务全解(二)

    在实际项目中,通常需要用到定时任务(定时作业),spring框架提供了很好的实现. 1.  下载spring-quartz插件包 这里默认当前系统中是集成了spring框架的基本功能的.去网上下载sp ...

  3. mysql事件调度定时任务_详解MySQL用事件调度器Event Scheduler创建定时任务

    前言 事件调度器相当于操作系统中的定时任务(如:Linux中的cron.Window中的计划任务),但MySql的事件调度器可以精确到秒,对于一些实时性要求较高的数据处理非常有用. 1. 创建/修改事 ...

  4. MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结...

    MySQL中有六种日志文件, 分别是:重做日志(redo log).回滚日志(undo log).二进制日志(binlog).错误日志(errorlog).慢查询日志(slow query log). ...

  5. mysql 表空间收缩_【135期】谈谈MySQL中的重做日志,回滚日志,以及二进制日志的区别及各自作用...

    点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅 阶段汇总集 ...

  6. MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结

    前言 1. ''最近公司大佬让我优化sql的时候,说可以通过控制where条件,尽可能的少的较少数据库的开支,少生成一些无用的binlog.由此引出binlog这个概念,大家一起学习一下 关于Binl ...

  7. MySQL 中的重做日志,回滚日志以及二进制日志的简单总结

    转载自 MySQL 中的重做日志,回滚日志以及二进制日志的简单总结 MySQL中有六种日志文件,分别是:重做日志(redo log).回滚日志(undo log).二进制日志(binlog).错误日志 ...

  8. mysql重做日志与binlog日志区别_【135期】谈谈MySQL中的重做日志,回滚日志,以及二进制日志的区别及各自作用...

    MySQL中有六种日志文件,分别是:重做日志(redo log).回滚日志(undo log).二进制日志(binlog).错误日志(errorlog).慢查询日志(slow query log).一 ...

  9. 一文详解MySQL中的事件调度器EVENT

    MySQL中的事件调度器,EVENT,也叫定时任务,类似于Unix crontab或Windows任务调度程序. EVENT由其名称和所在的schema唯一标识. EVENT根据计划执行特定操作.操作 ...

  10. MySQL中的备份和恢复

    如何用mysql 命令进行备份和恢复?以test 库为例,创建一个备份,并再用此备份 进行恢复. mysqldump -u root -p test > test.sql mysql -u ro ...

最新文章

  1. linux 设置代理 安装jdk mysql tomcat redis hadoop
  2. java 锁_Java 锁之我见
  3. javase基础socket编程之局域网聊天,局域网文件共享
  4. 对于窗口大小为n个滑动窗口,最多可以有( )帧已发送但没有确认。
  5. 页面url带参数_微信小程序云开发教程微信小程序的JS高级页面间数据传递
  6. linux剪切一行,Linux基础命令:文本处理工具之cut
  7. oracle日期函数2!
  8. Atitit.印章文化 印章的起源历史与发展 v2 r99 .docx
  9. linux木马盗取管理员权限,新型Linux 加密挖矿木马窃取您的root密码并禁用您的AV...
  10. 14AMESIM安装教程
  11. 三次hermite插值matlab,三次hermite插值
  12. 2 html绘制一个太极图,用html5画动态太极图
  13. 解决win10开启移动热点共享手机连上后无法上网的问题
  14. java clh_CLH lock 原理及JAVA实现
  15. 操作系统知识总结与常见面试题(持续更新)
  16. NGINX中如何根据客户端IP地址控制访问
  17. 企业级利器,阿里云 NVMe 盘和共享存储
  18. 我的那些年~小小少年~小屁孩
  19. C++输入中iomanip的使用(基础)
  20. Matlab多张二维图堆叠成一张三维图

热门文章

  1. 跟我学系列,走进Scrapy爬虫(六)Spiders爬虫
  2. Python制作黑客工具,发现了同学U盘里见不得人的秘密
  3. Java栈,队列和循环队列的实现
  4. 为什么手机网速太慢_为什么苹果手机的网速变慢了_苹果手机上网速度慢的解决方法-系统城...
  5. 扫雷小游戏 纯C语言/C++开发分享成果和记录
  6. python是高级语言还是低级语言_python学习之高级语言和低级语言
  7. 幽灵蛛(pholcus)(三)--strings学习资料
  8. 微信小程序云端图片上传,存储,获取,显示
  9. java实现火车票查询_java抓取12306火车余票信息
  10. MyEclipse 中文转英文