MySQL数据库小项目日志表定期删除实现方案

数据库 MySQL
最近需要对一个对数据表做清理的操作,这个环境是一个线上业务,因为各种原因,表中的数据比较臃肿,而磁盘空间又比较小,所以经常导致磁盘空间爆满,和业务确认后对数据做定时删除,实现方式如下,以下针对小项目。

最近需要对一个对数据表做清理的操作,这个环境是一个线上业务,因为各种原因,表中的数据比较臃肿,而磁盘空间又比较小,所以经常导致磁盘空间爆满,和业务确认后对数据做定时删除,实现方式如下,以下针对小项目。

[[286806]]

1. 开启事件调度器

  1. set global event_schedulerON;             show variables like '%event_scheduler%';#my.cnf增加参数event_scheduler = on 

2. 创建日志删除记录表

  1. CREATE TABLE IF NOT EXISTS mq_log( name VARCHAR(400) NOT NULL COMMENT '删除信息', row INT COMMENT '删除行数', del_time TIMESTAMP COMMENT '删除时间') COMMENT = '日志删除记录表'

3. 创建日志删除存储过程

这里主要用了异常记录、影响行数记录、事务处理几个特点

  1. drop procedure if exists del_mq_log;DELIMITER // create procedure del_mq_log()BEGIN    DECLARE  affect_rows INT;       DECLARE  affect_rows2 INT;       DECLARE  affect_rows3 INT;       declare v_commit int default 2; -- 定义事务用,1为正常,-10为失败    declare msg text;-- 记录错误信息    -- 异常的时候msg捕获报错信息    declare continue handler for sqlexception     begin get diagnostics condition 1  msg = message_text;set v_commit = -10; end ;        start transaction;    -- 设置事务    delete from lcp_mq_record where last_update_date < DATE_SUB(CURDATE(),INTERVAL 30 DAY);    select ROW_COUNT() into @affect_rows;    delete from lcp_dd_service_record where last_update_date < DATE_SUB(CURDATE(),INTERVAL 30 DAY);    select ROW_COUNT() into @affect_rows2;    delete from lcp_api_service_record where last_update_date < DATE_SUB(CURDATE(),INTERVAL 30 DAY);    select ROW_COUNT() into @affect_rows3;    insert into mq_log values('删除lcp_mq_record成功',@affect_rows,now()),('删除lcp_dd_service_record成功',@affect_rows2,now()),('删除lcp_api_service_record 成功',@affect_rows3,now()); -- 记录删除情况    -- 异常回滚且记录日志    if v_commit = -10 then           ROLLBACK;        insert into mq_log values(msg,0,now());    end if ;END//DELIMITER ; 

mysql数据库小项目日志表定期删除实现方案

4. 创建一个每天凌晨1点执行存储过程的定时任务

  1. DROP event IF EXISTS e_del_mqlog;     CREATE EVENT e_del_mqlog     ON SCHEDULE   EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR)  DO call del_mq_log(); 

5. 第一次删除需做回收

  1. alter table lcp_mq_record engine=innodb;alter table lcp_dd_service_record engine=innodb;alter table lcp_api_service_record engine=innodb

mysql数据库小项目日志表定期删除实现方案

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2011-08-02 10:37:27

Oracle数据库archivelog文

2022-05-09 15:52:23

MySQL数据库数据库表

2019-01-02 09:30:59

MySQL数据库日志审计

2010-05-24 13:14:19

创建MySQL

2009-07-07 16:39:33

JSP数据库配置

2011-07-18 09:36:42

Mysql数据库root@localh

2018-05-02 08:48:58

Raid存储MySQL

2011-07-28 17:02:59

MYSQL数据库跨表更新数据并合

2010-06-07 13:53:04

MySQL数据库表

2011-05-18 13:16:21

MySQL数据库锁定

2009-02-02 13:16:23

修复数据表MySQL

2010-10-13 11:54:00

MySQL数据库表

2019-08-19 01:34:38

数据库SQL数据库优化

2018-08-24 13:58:13

数据库MySQL备份

2011-03-07 16:42:05

MySQL数据库安全

2011-03-09 08:53:02

MySQL优化集群

2010-05-20 16:44:18

卸载MySQL

2019-12-13 10:31:45

数据库SQLMySQL

2023-09-14 23:05:57

​ ​MySQL数据库

2010-05-12 18:02:11

MySQL数据库
点赞
收藏

51CTO技术栈公众号