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 约束, ...... ) 修改表名 ...
随机推荐
- android.app.Activity 的介绍
发现当前Android的资料不是非常多,并且对于Activity的介绍也非常少.所以把官方文档的android.app.Activity的介绍翻译了一下,增加了一些自己的理解.各位假设认为我自己理解的 ...
- 关于Android中so解析那些事
1.Android系统目前支持的CPU架构:ARMv5.ARMv7.x86.MIPS.ARMv8.MIPS64.x86_64,每一种都关联着一个ABI(Application Binary Inter ...
- 摧枯拉朽,说说ES6的三把火
阅读目录 我是 Jser 我骄傲 作用域 模块系统 类(Class) 我是 Jser 我骄傲 JavaScript 如今可谓是屌丝逆袭高富帅的代名词哈,从当初闹着玩似的诞生到现在 Github 上力压 ...
- CrawlSpiders
1.用 scrapy 新建一个 tencent 项目 2.在 items.py 中确定要爬去的内容 # -*- coding: utf-8 -*- # Define here the models f ...
- 33 款主宰 2017 iOS 开发的开源库
推荐一篇文章 改文章汇聚了现在主流的一些三方框架,很值得一看 https://mp.weixin.qq.com/s/ICodliohtzbmA-eLKRFT-Q
- 【Netty】源码分析目录
前言 为方便系统的学习Netty,特整理文章目录如下. [Netty]第一个Netty应用 [Netty]Netty核心组件介绍 [Netty]Netty传输 [Netty]Netty之ByteBuf ...
- Java8函数之旅 (五) -- Java8中的排序
前言 对数据进行排序是平常经常会用到的操作之一,使用Jav8排序可以减少你在排序这方面的代码量,优化你的代码. 测试用例代码 定义个实体类User,拥有姓名name,年龄age,积分credit ...
- ArcGIS 网络分析[1.1] 创建用于网络分析用的线类型shp文件[这个太基础了吧!]
具体的准备,在上一篇就说过了,不再赘述. 阅读本篇前,需要的预备知识是:ArcGIS创建各种矢量数据的方法,了解地理坐标与投影坐标 本篇只创建单一的线数据,至于点数据,以后进行复杂的网络分析时再添加进 ...
- window下nginx的常用命令
window nginx 启动 常用命令 2016-05-04 11:11 214人阅读 评论(0) 收藏 举报 分类: nginx(5) 版权声明:本文为博主原创文章,未经博主允许不得转载. 启动 ...
- python爬虫爬取人人车(二手车)、利用padas、matplotlib生成图表,将信息打成csv格式
该程序主要为了抓取人人车卖车信息,包括车系.车型号.购车日期.卖车价格.行驶路程.首付价格等等信息.话不多说直接代码. 入库之后将Mongodb里的信息导出成Excel语句 mongoexport - ...