mysql 定时任务和存储过程

Posted htoooth

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 定时任务和存储过程相关的知识,希望对你有一定的参考价值。

mysql 定时任务和存储过程

最近在做日志系统,中间用到了 mysql, 其中有一个要求: 把数据库中 7天之后的日志清除了。看到 mysql 也支持 定时任务。于是就用 mysql 来做了。下面就是这次使用代码。

存储过程

use webapm;

--创建存储过程
DELIMITER $$
CREATE PROCEDURE `p_del_slow`(IN `date_inter` INT)
BEGIN
    DELETE FROM slow_duration WHERE (TO_DAYS(NOW()) - TO_DAYS(FROM_UNIXTIME(create_time/1000)))>=date_inter;
END$$
DELIMITER ;

DELIMITER $$
CREATE PROCEDURE `p_del_error`(IN `date_inter` INT)
BEGIN
    DELETE FROM error_report WHERE (TO_DAYS(NOW()) - TO_DAYS(FROM_UNIXTIME(create_time/1000)))>=date_inter;
END$$
DELIMITER ;
-- 删除存储过程
drop procedure if exists p_del_slow;
drop procedure if exists p_del_error;

-- 列出所有存储过程
select specific_name from mysql.proc;

-- 查看某一个存储过程的具体内容
select body from mysql.proc where specific_name = 'p_del_slow';

-- 调用存储过程
call p_del_slow();

定时任务

-- 查看定时配置开启
show variables like '%event_sche%';
set global event_scheduler=1;

-- 创建定时任务
CREATE EVENT `e_del_slow_route`
ON SCHEDULE EVERY 1 DAY STARTS '2017-12-7 0:0:0'
ON COMPLETION PRESERVE DISABLE
DO CALL p_del_slow (7);

CREATE EVENT `e_del_error_report`
ON SCHEDULE EVERY 1 DAY STARTS '2017-12-7 0:0:0'
ON COMPLETION PRESERVE DISABLE
DO CALL p_del_error (7);

--查看本机所有的事件
SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS;

--删除定时任务
drop event if exists e_del_slow_route;
drop event if exists e_del_error_report;

整合

建好定时任务之后,开启定时任务:

--开启定时任务
alter event e_del_slow_route on completion preserve enable;
alter event e_del_error_report on completion preserve enable;

--关闭定时任务
alter event e_del_slow_route on completion preserve disable;
alter event e_del_error_report on completion preserve disable;

总结

在学习过程中,发现了以下问题:

  1. 使用图形工具连接数据库,发现不能使用这些语句有问题,使用 mysql 命令行客户端没有问题。
  2. 客户端可以导入.sql 文件,使用 \. event.sql
  3. 感谢这个人的博客: http://jiyiren.github.io/2016/03/27/Mysql_schedule/
  4. 以上的代码均可以使用。

以上是关于mysql 定时任务和存储过程的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL利用事件和存储过程实现执行定时任务

Linux环境下Shell调用MySQL并实现定时任务

mysql的存储过程实现定时任务执行

MySQL定时执行脚本(计划任务)实例

mysql事件机制——定时任务

MySql小技能:定时任务