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. 以上的代码均可以使用。
  • 相关阅读:
    【Silverlight】汉诺塔游戏,带AI
    Farseer Physics Engine
    解决SilverLight的图片裁剪问题
    【C#】三维立体验证码 (3DCaptcha)
    又一个“众所周知”的DAL层设计BUG
    【C#】性别类
    36进制条码序列号生成器 [更新]
    理想的软件设计标准
    表驱动法概念到实战(一) 原理及基本运用
    Sudoku solver
  • 原文地址:https://www.cnblogs.com/htoooth/p/8016446.html
Copyright © 2011-2022 走看看