MYSQL定时清除备份数据的具体操作

1|0 背景

由于项目需要,每个月的历史存量数据需要进行一个归档和备份操作,以及一些日志表需要进行一个明细字段清除,让mysql数据库磁盘节省空间。则需要一些定时任务来定时清理这些数据。

2|0技术选型

  • Java 可以基于Quartz/Timer来使用定时任务机制来编写定时任务,需要依赖于Java程序
  • 基于Linux下Crontab来基于cron表达式构建定时任务文档必定需要编写对应的脚本,但是在这个脚本中,由于需要操作数据库,必定会涉及到明文密码这样的一个数据,这样不是很安全。
  • 由于使用到的是MYSQL数据库,而MYSQL又支持定时任务,所以可以使用MYSQL自带定时任务。

3|0具体操作

3|1mysql配置

由于定时任务这个选项在mysql的默认配置是关闭的,所以保险起见,我们先查询一下该选项是否打开

show variables like '%event_scheduler%';

如果显示的为Off选项,有提供如下两种方式对其进行修改

​ 1. 语句方式(当前启动的实例有效,重启后无效)

set global event_scheduler=1;

​ 2. 配置my.cnf(windows下是my.ini)下添加如下选项

[mysqld]
event_scheduler=ON 

然后将其保存后重启mysql即可

3|2sql编写

创建存储过程(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;//关闭定时任务

4|0值得注意的地方

如果你的全局参数没有配置开启定时任务,则会导致你虽然执行了开启已经创建好的事件,但是你在information_schema.EVENTS表中还是查询不到记录

4|1常见的周期定时规则

① 周期执行 – 关键字 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天

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

(0)

相关推荐

  • Linux shell实现每天定时备份mysql数据库

    每天定时备份mysql数据库任务,删除指定天数前的数据,保留指定天的数据: 需求:   1,每天4点备份mysql数据:   2,为节省空间,删除超过3个月的所有备份数据:   3,删除超过7天的备份数据,保留3个月里的 10号 20号 30号的备份数据: #创建shell文件 vim backup_mysql.sh mysqldump -uroot -p123456 --all-databases > /data/dbdata/mysqlbak/`date +%Y%m%d`.sql find

  • MySQL定时备份之使用Linux下的crontab定时备份实例

    1. Mysql备份某个数据库的命令 复制代码 代码如下: ##################################################################  # 备份某个数据库  ################################################################## # root 用户,创建备份目录  mkdir -p /usr/local/cncounter/mysql_dump  cd /usr/local/

  • 定时备份mysql, 定时切割nginx access log的方法

    定时备份mysql 放入 /etc/cron.hourly/ 复制代码 代码如下: #!/bin/bash DUMP=/usr/local/webserver/mysql/bin/mysqldump OUT_DIR=/data1/backup/ DB_NAME=数据库名 DB_USER=数据库用户 DB_PASS=数据库密码 #How much days backup most DAYS=3 #12 hours ago MINS=720 #Core of script cd $OUT_DIR D

  • linux实现mysql数据库每天自动备份定时备份

     概述 备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程.而对于一些网站.系统来说,数据库就是一切,所以做好数据库的备份是至关重要的! 备份是什么? 为什么要备份 容灾方案建设 存储介质 光盘 磁带 硬盘 磁盘阵列 DAS:直接附加存储 NAS:网络附加存储 SAN:存储区域网络 云存储 这里主要以本地磁盘为存储介质讲一下计划任务的添加使用,基本的备份脚本,其它存储介质只是介质的访问方式可能不大一样. 1.

  • Navicat for MySQL定时备份数据库及数据恢复详解

    在做数据库修改或删除操作中,可能会导致数据错误,甚至数据库奔溃,而有效的定时备份能很好地保护数据库.本篇文章主要讲述Navicat for MySQL定时备份数据库和数据恢复等功能,同时可以定时播放电影等设置,希望对您有所帮助,如果文章中存在错误或不足之处,还请海涵~ 一. 设置计划任务定时备份数据库 计划任务就是让电脑在指定的时间内执行指定的动作,这些动作可以是一个程序,也可以是一个批处理,但是至少是可以运行的!其实再通俗一点也就是相当于你在那个时间里面进行了对某个东西对鼠标双击的操作. 1.

  • MySQL数据库定时备份的实现方法

    1. 创建shell脚本 vim backupdb.sh 创建脚本内容如下: #!/bin/sh db_user="root" db_passwd="123456" db_name="userdb" name="$(date +"%Y%m%d%H%M%S")" /usr/bin/mysqldump -u$db_user -p$db_passwd $db_name >>/home/backup/$

  • mysql自动定时备份数据库的最佳方法(windows服务器)

    网上有很多关于window下Mysql自动备份的方法,可是真的能用的也没有几个,有些说的还非常的复杂,难以操作. 我们都知道mssql本身就自带了计划任务可以用来自动备份,可是mysql咱们要怎么样自动有备份呢? 教大家一个最简单的方法. 这个方法是用bat批处理来完成的. 假想环境:MySQL 安装位置:D:\Program Files\MySQL\MySQL Server 5.0\data 如图: 数据库名称为:952game数据库备份目的地:d:\db_bak\ (你想把数据库备份到哪个盘

  • CentOS下mysql定时备份Shell脚本分享

    1.备份语句 复制代码 代码如下: # /usr/local/mysql/bin/mysqldump -utest -ptest test --socket=/tmp/mysql.3306.sock > /usr/local/mysql_backup/3306/test-`date +%Y%m%d`.sql.gz 语句说明:   /usr/local/mysql/bin/mysqldump:MySql安装目录下 -utest:分为两块,一块为-u一块为test:其中-u表示其为用户名,test表

  • 在Windows环境下使用MySQL:实现自动定时备份

    一.编写备份脚本 rem auther:www.yumi-info.com rem date:20171222 rem ******MySQL backup start******** @echo off forfiles /p "E:\mysql\MySQL BackUp" /m backup_*.sql -d -30 /c "cmd /c del /f @path" set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%0

  • 定时备份 Mysql并上传到七牛的方法

    多数应用场景下,我们需要对重要数据进行备份.并放置到一个安全的地方,以备不时之需. 常见的 MySQL 数据备份方式有,直接打包复制对应的数据库或表文件(物理备份).mysqldump 全量逻辑备份.xtrabackup 增量逻辑备份等. 常见的数据存储方式有,本机存储.FTP 上传到远程服务器.云存储(如阿里云OSS.七牛云存储等).甚至本地也行. 我们可能不想每次都手动去备份,也不想每次都那么耗时间的去下载,也不想就放在服务器上丢了,因为我们需要异地备份.那我们可以尝试,写个脚本定时备份数据

随机推荐