MYSQL数据库表按月备份,滚动,保留6次备份
要求:
- 每月1日0点:在不影响业务的情况下,备份整月的数据,保留6次备份。
思路:
- 基于MYSQL事件功能,每月按时完成操作
- RENAME语句具有原子性,新旧表无缝切换
- RENAME语句仅修改表定义,大表瞬间完成
- 基于上面三点,实现了表数据按月切割
步骤:
- 新建一个待替换的空表
- 重命名原表为日期备份表,空表为原表
- 删除6次前备份的那张表
参考官方文章
https://dev.mysql.com/doc/refman/5.6/en/rename-table.html
前提要求:打开MYSQL的事件功能
打开事件功能 set global event_scheduler = on; 查看事件功能是否打开 show variables like 'event_scheduler';
MYSQL事件实现
DELIMITER ;;
CREATE EVENT BACKUP
HOUR)
ON COMPLETION PRESERVE ENABLE
DO
BEGIN
select now();
END
;;
DELIMITER ;
返回日期 CURDATE() 返回前一天的数字 ) 日期减法函数:计算当天减去月初到昨天的天数,等于这个月的1号 DATE_SUB(CURDATE(),INTERVAL DAY) 日期加法函数:得到下月1号的日期 DATE_ADD DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY) 日期加法函数:得到下月1号的凌晨1点的时间 DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL HOUR)
实现细节
CREATE TABLE `version_replace` ( `table_name` ) NOT NULL, `table_version` ) unsigned ', UNIQUE KEY `table_name_idx` (`table_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
动态SQL语句实现改表名称为日期变量
SET @command=concat('RENAME TABLE `version` TO `version_backup_',date_format(now(),'%y%m'),'` , `version_replace` TO `version`');
PREPARE modify FROM @command;
EXECUTE modify;
动态SQL语句实现删除6次之前的备份
month),'%y%m'),''); PREPARE modify FROM @command; EXECUTE modify;
获取格式化后的年月份 select date_format(now(),'%y%m'); 获取当前日期的前6个月 month); 取得当前日期的前6个月,并格式化显示,为拼接表名称做准备 month),'%y%m');
实现细节
最终实现
DELIMITER ;;
CREATE EVENT BACKUP
HOUR)
ON COMPLETION PRESERVE ENABLE
DO
BEGIN
/*创建一个待替换的空表*/
CREATE TABLE `version_replace` (
`table_name` ) NOT NULL,
`table_version` ) unsigned ',
UNIQUE KEY `table_name_idx` (`table_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*RENAME语句具有原子性,把原表重命名为日期备份表,并且将创建的新表重命名为原表*/
SET @command=concat('RENAME TABLE `version` TO `version_backup_',date_format(now(),'%y%m'),'` , `version_replace` TO `version`');
PREPARE modify FROM @command;
EXECUTE modify;
/*删除6个月前的那次备份*/
month),'%y%m'),'');
PREPARE modify FROM @command;
EXECUTE modify;
END
;;
DELIMITER ;
https://dev.mysql.com/doc/refman/5.6/en/rename-table.html
MYSQL数据库表按月备份,滚动,保留6次备份的更多相关文章
- 将Hive统计分析结果导入到MySQL数据库表中(一)——Sqoop导入方式
https://blog.csdn.net/niityzu/article/details/45190787 交通流的数据分析,需求是对于海量的城市交通数据,需要使用MapReduce清洗后导入到HB ...
- centos/windows服务器,Mysql数据库表结构损坏-已解决
[问题原因]服务器突然断电 [故障报告]数据库表结构损坏 [解决思路]进入强制恢复模式,备份库表及数据重建 故障发现 周末公司断电,周一启动数据库就直接报错了 查看日志 上面标记的log,明确表示是非 ...
- mysql数据库表的自增主键号不规律,重新排列
mysql数据库表的自增主键ID乱了,需要重新排序. 原理:删除原有的自增ID,重新建立新的自增ID. 1.删除原有主键: ALTER TABLE `table_name` DROP `id`; 2. ...
- 创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表
创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表 创建数据模型类(POCO类) 在Models文件夹下添 ...
- 用户中心mysql数据库表结构的脚本
/* Navicat MySQL Data Transfer Source Server : rm-m5e3xn7k26i026e75o.mysql.rds.aliyuncs.com Source S ...
- mysql数据库表结构导出
mysql数据库表结构导出 命令行下具体用法如下: mysqldump -u用戶名 -p密码 -d 数据库名 表名 > 脚本名; 导出整个数据库结构和数据 mysqldump -h localh ...
- Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题
Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...
- 查看MySQL数据库表的命令介绍
如果需要查看MySQL数据库中都有哪些MySQL数据库表,应该如何实现呢?下面就为您介绍查看MySQL数据库表的命令,供您参考. 进入MySQL Command line client下查看当前使用的 ...
- Database学习 - mysql 数据库 表操作
mysql 数据库 表操作 创建数据表 基本语法格式: 创建数据表: create table 表名( 字段名 datatype 约束, 字段名 datatype 约束, ...... ) 修改表名 ...
随机推荐
- 阿里云部署Docker(4)----容器的使用
通过上一节的学习,我们知道怎样执行docker容器,我们执行了一个普通的,一个后台的,我们还学习了几个指令: docker ps - Lists containers. docker logs - S ...
- MooseFS代码分析(一)
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...
- 【Jquery系列】prop和attr区别
问题描述 由于prop(property的缩写)和attr(attribute的缩写)翻译成汉语,均有“特性.属性”等意思的原因,导致大家容易混淆分不清,本篇文章将试图从英文含义,中文含义和Jquer ...
- .net 裁剪图片(不压缩)
命名空间: using System.Drawing; using System.Drawing.Imaging; /// <summary> /// 生成图片缩略文件 /// </ ...
- 代码生成利器:IDEA 强大的 Live Templates(转)
代码生成利器:IDEA 强大的 Live Templates - 文章 - 伯乐在线http://blog.jobbole.com/110607/ 前言 Java 开发过程经常需要编写有固定格式的代码 ...
- Android Weekly Notes Issue #288
Android Weekly Issue #288 December 17th, 2017 Android Weekly Issue #288 本期内容主要包括介绍Kotlin DSL使用kotlin ...
- 历年NOIP选题题解汇总
联赛前上vijos板刷往年联赛题,使用在线编辑编写代码,祝我rp++. 废话不多说,挑比较有意思的记一下. 题目是按照年份排序的,最早只到了03年. 有些题目因为 我还没写/很早之前写的忘了 所以就没 ...
- bzoj 3620: 似乎在梦中见过的样子
Description "Madoka,不要相信 QB!"伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka 的一个噩梦,也同时是上个轮回 ...
- touchstart和touchend事件
touchstart和touchend事件 移动互联网是未来的发展趋势,现在国内很多互联网大佬都在争取移动这一块大饼,如微信及支付宝是目前比较成功的例子,当然还有各种APP和web运用. 由于公司的需 ...
- 关于js代码执行顺序
上网查了一下关于这个方面的资料,大部分都是关于两个script标签中的js代码和变量以及函数提升方面的知识. 1.两个script标签 <script> alert("我是代码块 ...