MYSQL定时任务-定时清除备份数据
背景
由于项目需要,每个月的历史存量数据需要进行一个归档和备份操作,以及一些日志表需要进行一个明细字段清除,让mysql数据库磁盘节省空间。则需要一些定时任务来定时清理这些数据。
技术选型
- Java 可以基于Quartz/Timer来使用定时任务机制来编写定时任务,需要依赖于Java程序
- 基于Linux下Crontab来基于cron表达式构建定时任务文档必定需要编写对应的脚本,但是在这个脚本中,由于需要操作数据库,必定会涉及到明文密码这样的一个数据,这样不是很安全。
- 由于使用到的是MYSQL数据库,而MYSQL又支持定时任务,所以可以使用MYSQL自带定时任务。
具体操作
mysql配置
- 由于定时任务这个选项在mysql的默认配置是关闭的,所以保险起见,我们先查询一下该选项是否打开
show variables like '%event_scheduler%';
如果显示的为Off选项,有提供如下两种方式对其进行修改
1. 语句方式(当前启动的实例有效,重启后无效)
set global event_scheduler=1;
2. 配置my.cnf(windows下是my.ini)下添加如下选项
[mysqld]
event_scheduler=ON

然后将其保存后重启mysql即可
sql编写
- 创建存储过程(procedure)[可选:如果只是简单sql可以直接在定时任务中指定]
存储过程:存储过程,又称存储程序(英语:Stored Procedure),是在数据库存储复杂程序,以便外部程序调用的数据库对象,可以视为数据库的一种函数或子程序。
具体学习地址:点我
create PROCEDURE sched_clean() --命名
BEGIN
-- 定义参数
DECLARE begin_time BIGINT DEFAULT UNIX_TIMESTAMP(DATE_SUB(CURRENT_DATE(),interval 31 DAY))*1000;
DECLARE end_time BIGINT DEFAULT UNIX_TIMESTAMP(DATE_SUB(CURRENT_DATE(),interval 30 DAY))*1000;
-- 更新数据
UPDATE test_table SET rule_cost=null WHERE start_time>begin_time and start_time<end_time;
END
- 创建定时任务
当创建好了存储过程后,我们就可以定时调用该存储过程了
CREATE EVENT `demo`.`day_of_clean_event`
ON SCHEDULE EVERY '1' DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR)
ON completion preserve disable
DO call sched_clean();
代码说明:
CREATE EVENT demo.day_of_clean_event在demo数据库中创建一个名为day_of_clean_event事件- 表示创建时间定时周期,以及开始时间,该处表示从明天1点从开始,每天执行一次该任务
- 第三行表示创建后并不开始生效
- 第四行表示需要执行的任务(这里你也可以直接编写sql语句)
相关查询
- 查询本机的所有事件
SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS;
- 开启/关闭已经创建好的事件
alter event event_name on completion preserve enable;//开启定时任务
alter event event_name on completion preserve disable;//关闭定时任务
值得注意的地方
- 如果你的全局参数没有配置开启定时任务,则会导致你虽然执行了开启已经创建好的事件,但是你在
information_schema.EVENTS表中还是查询不到记录
常见的周期定时规则
① 周期执行 – 关键字 EVERY
单位有:second, minute, hour, day, week(周), quarter(季度), month, year,如:
on schedule every 1 second //每秒执行1次
on schedule every 2 minute //每两分钟执行1次
on schedule every 3 day //每3天执行1次
② 在具体某个时间执行 – 关键字 AT, 如:
on schedule at current_timestamp()+interval 5 day // 5天后执行
on schedule at current_timestamp()+interval 10 minute // 10分钟后执行
on schedule at '2016-10-01 21:50:00' // 在2016年10月1日,晚上9点50执行
③ 在某个时间段执行 – 关键字 STARTS ENDS, 如:
on schedule every 1 day starts current_timestamp()+interval 5 day ends current_timestamp()+interval 1 month // 5天后开始每天都执行执行到下个月底
on schedule every 1 day ends current_timestamp()+interval 5 day //从现在起每天执行,执行5天
MYSQL定时任务-定时清除备份数据的更多相关文章
- Windows 下 MySQL 简单定时自动备份、删除过期备份
Windows 下 MySQL 简单定时自动备份.删除过期备份 MySQL Workbench 客户端虽然好用,但并不提供自动备份功能.手工备份,确实繁琐. 新建一个 数据库备份文件存放目录,本例为D ...
- MySQL数据库定时自动备份脚本
Web系统,最重要的事项就是数据库的安全性和完整性. 定时做好备份,非常重要,千万不要在这个问题上偷懒.如果你的重要数据丢失了,会让你欲哭无泪. 导出表结构和数据 mysqldump -uroot ...
- linux下如何实现mysql数据库定时自动备份
概述 备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程.而对于一些网站.系统来说,数据库就是一切,所以做好 ...
- Mysql定时器定时删除表数据
由于测试环境有张日志表没定时2分钟程序就狂插数据,导致不到1一个月时间,这张日志表就占用了6.7G的空间,但是日志刷新较快,有些日志就没什么作用,就写了个定时器,定期删除这张表的数据 首先先查看mys ...
- tomcat 日志 按天自动分割 设定时任务定时清除
一.日志分割所需jar包 1.下载tomcat apache-tomcat-7.0.79.tar.gz 地址:http://www.apache.org/dist/tomcat/tomcat-7/ ...
- MySQL 数据库定时自动备份
创建备份目录 cd /home mkdir backup cd backup 创建备份 Shell 脚本: vim DatabaseName.sh #!/bin/bash /usr/local/mys ...
- mysql 用 source 导入备份数据
输入命令:source E:/proDB/start2.sql;
- mysql 5.7 停电导致无法启动、如何备份数据,重新安装mysql
用于记录服务器停电导致,mysql启动失败后,如何备份数据,重新安装mysql,主要分为数据备份,mysql重新安装. 1.mysql无法启动时,进行数据备份. 执行:systemctl start ...
- Mysql定时备份数据脚本
项目集群搭建完成,数据库虽有做主从同步,但考虑到数据安全性,为了满足这个需求那么要每天对数据备份处理, 但每天手动进行备份处理太过于被动,而且白天用户访问,会有数据变化以及在备份时会影响服务器正常运行 ...
随机推荐
- 使用DocumentFormat.OpenXml操作Excel文件.xlsx
1.开始 DocumentFormat.OpenXml是ms官方给一个操作office三大件新版文件格式(.xlsx,.docx,.pptx)的组件:特色是它定义了OpenXml所包含的所有对象(たぶ ...
- prometheus学习系列三:node_exporter安装部署
node_exporter简介 node_exporter安装部署 [root@node00 ~]# cd /usr/src/ [root@node00 src]# wget https://gith ...
- 自定义View(四),onMeasure
转自:http://blog.csdn.net/a396901990/article/details/36475213 简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量--on ...
- Redis中的LFU算法
在Redis中的LRU算法文中说到,LRU有一个缺陷,在如下情况下: ~~~~~A~~~~~A~~~~~A~~~~A~~~~~A~~~~~A~~| ~~B~~B~~B~~B~~B~~B~~B~~B~~ ...
- jmeter 实现登录参数化
业务场景 在测试过程中,一般需要模拟不同的用户登录,这样压测的数据比较平均,也能更好的模拟真实的压力情况. 如果使用同一个用户账号进行测试,那么比如在查询代办的时候,此人的待办太多,也不符合实际的情况 ...
- spark遇到的问题及解决方法
1. 表中数据过亿,加载速度过慢,而我只需要加载增量数据 如:加载昨天一整天的数据,添加predicates分区,方法如下: //predicates相当于是把昨天的数据分成一个区,其它的数据不加载 ...
- PAT甲级1013题解——并查集+路径压缩
题目分析: 本题初步浏览题目就知道是并查集的模板题,数据输入范围N为1~1000,则M的范围为0~1000^2,通过结构体记录每一对连线的关系,p[]数组记录每个节点的跟,对于k次查询,每次都要重新维 ...
- WebLogic任意文件上传漏洞(CVE-2019-2618)
WebLogic任意文件上传漏洞(CVE-2019-2618) 0x01 漏洞描述 漏洞介绍 CVE-2019-2618漏洞主要是利用了WebLogic组件中的DeploymentService接口, ...
- JSR303/JSR-349,hibernate validation,spring validation 之间的关系
JSR303是一项标准,JSR-349是其的升级版本,添加了一些新特性,他们规定一些校验规范即校验注解,如@Null,@NotNull,@Pattern,他们位于javax.validation.co ...
- Edraw Max 9.4 Crack Method
使用010editor修改以下两个文件. BaseCore.dll (修改二进制内容hex) Before C6 45 C8 62 C6 45 C9 64 C6 45 CA 65 C6 45 CB 6 ...