美文网首页
mysql事件+存储过程定时清理数据量大的表

mysql事件+存储过程定时清理数据量大的表

作者: 骆金 | 来源:发表于2019-12-03 21:43 被阅读0次

1、背景

由于最近自己对数据库进行了排查,发现有些表的数据量比较大,随后将查询的结果与领导汇报,领导指示需要出一个数据库的定时清理方案,我是通过mysql的事件+储存过程来实现表数据的定时清理。如果文中有啥错误,或者有更好的方案,欢迎探讨以及纠正~

2、过程

最开始的方案是,用服务器的定时任务crontab,执行程序,做定时清理数据库。自我感觉还不错,和领导讨论,成功被pass了,泪崩~,领导的需求是希望直接通过数据库定时任务,清理过期的数据,于是开始了用事件+存储过程的形式执行定时清理表数据。

3、环境

mysql:5.7.23
windows第三方工具:Navicat

4、操作

创建存储过程

通过Navicat创建存储过程,如图一,图二:
储存过程是假设每次删除1万条数据,这里的思路是查询删除数据最新的创建时间,过期则删除,如果数据需要备份,就备份一份数据信息,这里清空过期数据,可以不需要精确到每一条数据,只要将大量的过期数据删除即可

BEGIN
        DECLARE nowsDays timestamp  DEFAULT (SELECT curdate()); -- 当前时间
        DECLARE del_ctime timestamp DEFAULT  Null; -- 删除数据的时间
        

     -- 查询删除的最后一条记录
   SELECT @wxid:=id,@ctime:=cTime FROM info WHERE id>0 LIMIT del_num,1;
   SET del_ctime= @ctime;
     -- 判断最后一条数据是否过期,过期则删除,如果数据还需则保存后删除
     IF datediff(nowsDays, del_ctime)>del_days THEN 
            INSERT INTO infox SELECT * FROM info LIMIT del_num;
            DELETE FROM info WHERE id<@wxid LIMIT del_num;
     END IF;
END;
图一
图二
创建事件(定时任务)

上面已经将存储过程弄完,接下来,创建事件,调用存储过程,进行表删除。

检查mysql是否开启事件
MySQL [(demo)]> SHOW VARIABLES LIKE 'event_scheduler';
图三

如图三,如果Value为OFF,则需要开启事件

MySQL [(demo)]> SET GLOBAL event_scheduler = ON;
创建事件

通过Navicat创建事件,设置每天凌晨1点执行删除过期数据操作,如图四,图五:


图四
图五
查看事件是否创建成功,如图六:
SELECT * FROM information_schema.events; 
图六

相关文章

  • mysql事件+存储过程定时清理数据量大的表

    1、背景 由于最近自己对数据库进行了排查,发现有些表的数据量比较大,随后将查询的结果与领导汇报,领导指示需要出一个...

  • MySql常用的sql语句

    MySql常用的sql语句 数据库 表 表结构 表的数据 键 试图 联接 用户 存储过程 函数 其他语句

  • mysql存储过程

    一、执行过程1、创建数据库表 2、写入存储过程 3、执行 [mysql 存储过程海量数据写入和查询] 循环插入10...

  • mysql设置定时任务

    定时对数据库进行简单的操作,比如清理日志,可通过设置定时事件交由mysql事件调度器完成,而不用在应用程序中去写定...

  • MySql语法(4)—exists和in的区别(explain分

    首先在mysql数据库中新建两张表,并且插入数据。 MySql(准备)—mysql使用存储过程快速插入百万条数据 ...

  • MySQL快速创建千万测试数据

    mysql版本 8.0.21 创建基础表 使用存储过程造数据(不推荐) 采用临时表 4.1 创建临时表 4.2 生...

  • mysql表之间定时迁移数据 定时器 存储过程

    因为个人开发运营有一个网站http://www.houziyou.com 猴子哟吐槽一个吐槽和看段子文章的网站,有...

  • MySQL生成大量测试数据方法

    Mysql创建测试大量测试数据 修改mysql配置 创建测试数据库 创建数据表 创建随机字符串函数 创建存储过程 ...

  • MySQL之:存储过程

    存储过程 存储过程保存在mysql.proc表中 创建存储过程 CREATE PROCEDURE sp_name ...

  • MySQL介绍

    mysql介绍 其他数据库介绍 mysql特点 mysql存储引擎类型及特点 关于mysql单表存储 mysql介...

网友评论

      本文标题:mysql事件+存储过程定时清理数据量大的表

      本文链接:https://www.haomeiwen.com/subject/nvuxgctx.html