需求:一个庞大的日志表,现每天做定时统计一天的总数,放另一个表中,方便查看,运营。
旧方案:用脚本写好程序,用linux的crontab定时执行。
本文重点,用mysql定时器定时执行存储程序。
第一步:编写存储程序(需了解基本的存储程序的语法)
create procedure inproc() begin declare done int default 0; declare a,b,c int; declare curl cursor for select ver,date_format(time,'%Y%m%d') as dt,count(*) as count from ty.count where time>date_sub(curdate(),interval 1 day) group by ver,dt; declare continue handler for sqlstate '02000' set done = 1; open curl; repeat fetch curl into a,b,c; if not done then insert into ty.daycount values (null,b,a,c); end if; until done end repeat; close curl; end
这个存储程序主要用过了declare定义局部变量,声明curl光标,利用光标直到遍历结果集的作用。
执行这个语句之前要先
delimiter $$
执行完成后再
delimiter ;
用show查看是否已经成功
show procedure status like '%%';
第二步:开启mysql定时器
如果不是on,就执行
set global event_scheduler=1;
不需要重启mysql
会发现mysql多起了一个daemon进程
(注: 对于我们线上环境来说,使用event时,注意在主库上开启定时器,从库上关闭定时器,event触发所有操作均会记录binlog进行主从同步,从库上开启定时器很可能造成卡库。切换主库后之后记得将新主库上的定时器打开。)
第三步:创建定时任务
语法:
CREATE EVENT 的语法如下:
CREATE EVENT
[IF NOT EXISTS] ---------------------------------------------*标注1
event_name -----------------------------------------------------*标注2
ON SCHEDULE schedule ------------------------------------*标注3
[ON COMPLETION [NOT] PRESERVE] -----------------*标注4
[ENABLE | DISABLE] ----------------------------------------*标注5
[COMMENT 'comment'] --------------------------------------*标注6
DO sql_statement -----------------------------------------------*标注7
;
标注3:ON SCHEDULE
ON SCHEDULE 计划任务,有两种设定计划任务的方式:
1. AT 时间戳,用来完成单次的计划任务。
2. EVERY 时间(单位)的数量时间单位[STARTS 时间戳] [ENDS时间戳],用来完成重复的计划任务。
在两种计划任务中,时间戳可以是任意的TIMESTAMP 和DATETIME 数据类型,时间戳需要大于当前时间。
在重复的计划任务中,时间(单位)的数量可以是任意非空(Not Null)的整数式,时间单位是关键词:YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND。
提示: 其他的时间单位也是合法的如:QUARTER, WEEK, YEAR_MONTH,DAY_HOUR,DAY_MINUTE,DAY_SECOND,HOUR_MINUTE,HOUR_SECOND, MINUTE_SECOND,不建议使用这些不标准的时间单位。
标注4: [ON COMPLETION [NOT] PRESERVE]
ON COMPLETION参数表示"当这个事件不会再发生的时候",即当单次计划任务执行完毕后或当重复性的计划任务执行到了ENDS阶段。而PRESERVE的作用是使事件在执行完毕后不会被Drop掉,建议使用该参数,以便于查看EVENT具体信息。
标注5:[ENABLE | DISABLE]
参数Enable和Disable表示设定事件的状态。Enable表示系统将执行这个事件。Disable表示系统不执行该事件。
可以用如下命令关闭或开启事件:
ALTER EVENT event_name ENABLE/DISABLE
下面是我的实例,每天凌晨一点执行
CREATE EVENT `event_call_inproc` ON SCHEDULE EVERY 1 DAY STARTS '2013-09-12 01:00:00' ON COMPLETION PRESERVE ENABLE DO begin call ty.inproc();end
另外的一些例子:
每天凌晨三点执行 create event event_call_defer on schedule every 1 day starts date_add(date(curdate() + 1),interval 3 hour) on completion preserve enable do begin call test.warn(); end 每个月的一号凌晨1 点执行 CREATE EVENT EVENT2 ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 1 HOUR) ON COMPLETION PRESERVE ENABLE DO BEGIN CALL STAT(); END 每个季度一号的凌晨2点执行 CREATE EVENT TOTAL_SEASON_EVENT ON SCHEDULE EVERY 1 QUARTER STARTS DATE_ADD(DATE_ADD(DATE( CONCAT(YEAR(CURDATE()),'-',ELT(QUARTER(CURDATE()),1,4,7,10),'-',1)),INTERVAL 1 QUARTER),INTERVAL 2 HOUR) ON COMPLETION PRESERVE ENABLE DO BEGIN CALL SEASON_STAT(); END 每年1月1号凌晨四点执行 CREATE EVENT TOTAL_YEAR_EVENT ON SCHEDULE EVERY 1 YEAR STARTS DATE_ADD(DATE(CONCAT(YEAR(CURDATE()) + 1,'-',1,'-',1)),INTERVAL 4 HOUR) ON COMPLETION PRESERVE ENABLE DO BEGIN CALL YEAR_STAT(); END
(本文注重实战,语法等知识请查询相关手册)
相关推荐
创建表 创建存储过程 创建mysql的定时器event 启动定时器 停止定时器 查看表
mysql 存储过程 实战
微信小程序php后台内嵌mysql微信小程序php后台内嵌mysql微信小程序php后台内嵌mysql微信小程序php后台内嵌mysql微信小程序php后台内嵌mysql微信小程序php后台内嵌mysql微信小程序php后台内嵌mysql微信小程序php后台...
《PHP与MySQL程序设计 第4版 》pdf与源码 是全面讲述PHP与MySQL的经典之作 书中不但全面介绍了两种技术的核心特性 还讲解了如何高效地结合这两种技术构建健壮的数据驱动的应用程序 《PHP与MySQL程序设计 第4版 》...
JAVA ORACLE MYSQL 驱动程序 JAR包。
quartz定时器mysql的脚本,如果需要定时器持久化到数据库,可以使用
什么情况适合用存储过程? 当多个用不同语言开发的应用程序或不同平台的应用程序需要去执行相同的数据库操作. (避免为各个程序都开发相同的功能) 安全性要求较高时,使用存储程序和...MySql存储过程与事务处理教学PPT
计算机二级mysql数据库程序设计练习题(二)全文共12页,当前为第1页。计算机二级mysql数据库程序设计练习题(二)全文共12页,当前为第1页。计算机二级mysql数据库程序设计练习题(二) 计算机二级mysql数据库程序设计...
内容概述:通过MySQL存储过程实战的例子,学会使用MySQL存储过程。包含以下内容: 创建无参存储过程、有参存储过程、IF-ELSE存储过程、WHILE循环存储过程、CASE-WHEN条件控制存储过程、REPEAT UNTIL循环存储过程、...
Mysql 设备选型与系统规划-实战参考文档 有从事mysql的同学,可以进行参考
PHP与MySQL程序设计(第3版)pdf 高清版 供10个部分,请在我的资源里面全部下载后才能够解压 供150MB左右
MySQL实验报告5(存储过程与函数)(1)(1).pdf
微信小程序开发(PHP Laravel MySQL)教学大纲.pdf微信小程序开发(PHP Laravel MySQL)教学大纲.pdf微信小程序开发(PHP Laravel MySQL)教学大纲.pdf微信小程序开发(PHP Laravel MySQL)教学大纲.pdf微信小程序开发...
最新全国计算机等级考试二级MySQL数据库程序设计大纲(2018版)
MySQL数据库修复程序,表查看,读取,表设计。SQL数据库内容读取。
│ 7_MySQL存储引擎.mp4 │ 8_MySQL第三范式设计讲解.mp4 │ 9_MySQL数据库设计工具.mp4 │ ├─新版MySQL DBA综合实战班 第06天 │ 1_课堂作业讲解.mp4 │ 2_InnoDB内核之事务和多版本控制.mp4 │ 3_InnoDB底层...
mysql经典教程+mysql存储过程讲解 重点讲解Mysql的存储过程,触发器,游标的使用 对mysql不太熟的朋友可以好好学习。。。
mysql windows 驱动程序 如果要用sqlserver 做链接服务器的话 就要安装该驱动程序,用来创建一个odbc 数据源
在作.net開發的環境下,對MySQL數據庫的連接驅動程序。