这篇文章将为大家详细讲解有关MySQL数据库中怎么定期删除日志表,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

1. 开启事件调度器

setglobalevent_scheduler=ON;showvariableslike'%event_scheduler%';#my.cnf增加参数event_scheduler=on

2. 创建日志删除记录表

CREATETABLEIFNOTEXISTSmq_log(nameVARCHAR(400)NOTNULLCOMMENT'删除信息',rowINTCOMMENT'删除行数',del_timeTIMESTAMPCOMMENT'删除时间')COMMENT='日志删除记录表';

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

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

dropprocedureifexistsdel_mq_log;DELIMITER//createproceduredel_mq_log()BEGINDECLAREaffect_rowsINT;DECLAREaffect_rows2INT;DECLAREaffect_rows3INT;declarev_commitintdefault2;--定义事务用,1为正常,-10为失败declaremsgtext;--记录错误信息--异常的时候msg捕获报错信息declarecontinuehandlerforsqlexceptionbegingetdiagnosticscondition1msg=message_text;setv_commit=-10;end;starttransaction;--设置事务deletefromlcp_mq_recordwherelast_update_date<DATE_SUB(CURDATE(),INTERVAL30DAY);selectROW_COUNT()into@affect_rows;deletefromlcp_dd_service_recordwherelast_update_date<DATE_SUB(CURDATE(),INTERVAL30DAY);selectROW_COUNT()into@affect_rows2;deletefromlcp_api_service_recordwherelast_update_date<DATE_SUB(CURDATE(),INTERVAL30DAY);selectROW_COUNT()into@affect_rows3;insertintomq_logvalues('删除lcp_mq_record成功',@affect_rows,now()),('删除lcp_dd_service_record成功',@affect_rows2,now()),('删除lcp_api_service_record成功',@affect_rows3,now());--记录删除情况--异常回滚且记录日志ifv_commit=-10thenROLLBACK;insertintomq_logvalues(msg,0,now());endif;END//DELIMITER;

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

DROPeventIFEXISTSe_del_mqlog;CREATEEVENTe_del_mqlogONSCHEDULEEVERY1DAYSTARTSDATE_ADD(DATE_ADD(CURDATE(),INTERVAL1DAY),INTERVAL1HOUR)DOcalldel_mq_log();

5. 第一次删除需做回收

altertablelcp_mq_recordengine=innodb;altertablelcp_dd_service_recordengine=innodb;altertablelcp_api_service_recordengine=innodb;

关于MySQL数据库中怎么定期删除日志表就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。