zoukankan      html  css  js  c++  java
  • 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. 以上的代码均可以使用。
  • 相关阅读:
    详细版Jmeter随机参数的接口并发测试总结
    Windows下MQTT代理服务器的搭建
    关于使用elascticsearch的两个小技巧
    解决easyswoole的swServer_start_check: onTask event callback must be set at报错
    解决使用宝塔安装的swoole扩展,运行项目出现的3个常见问题
    浅谈一下ThinkPHP5.1实现事务嵌套的特性
    资源出现多个 "Access-Control-Allow-Origin"
    Mac 制作系统启动盘
    深入剖析分布式一致性共识算法
    分布式系统限流算法分析与实现
  • 原文地址:https://www.cnblogs.com/htoooth/p/8016446.html
Copyright © 2011-2022 走看看