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仿微信朋友圈图片浏览器(支持图片手势缩放,拖动)
※效果 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluZ2xvbmd4aW4yNA==/font/5a6L5L2T/fontsize/400/fil ...
- python的unittest測试框架的扩展浅谈
非常多时候測试框架须要依据測试数据来自己主动生成測试用例脚本,比方接口測试,通过不同參数构建组合去请求接口,然后验证返回结果.假设这样能通过配置excel数据来驱动測试.而不用去写一大堆的測试用例脚本 ...
- Java Annotation认知(包括框架图、详细介绍、示例说明)(转)
本文转自:http://www.cnblogs.com/skywang12345/p/3344137.html 网上很多关于Java Annotation的文章,看得人眼花缭乱.Java Annota ...
- 关于redis的使用
距离上次写博客有两三个月了,这段时间去了新公司上班,忙了很多.接手了一个项目,刚好用到redis,先总结下遇到的问题(跟redis相关的问题): 1.列表问题 举例:展示商品列表,但是要先展示运营置顶 ...
- 为eclipse离线安装hibernate tools插件
工具/原料 eclipse luna jboss hibernate tools 方法/步骤 下载hibernate tools插件 在eclipse根目录下创建myplugins和l ...
- XSS注入,js脚本注入后台
曾经一度流行sql注入,由于现在技术的更新,已经看不到这问题了,但是又出来新的安全问题,XSS攻击,他的原理就是在前端提交表单的时候,在input标签当中输入js脚本,通过js脚本注入后台,请看下图. ...
- 安装卸载selenium
安装: C:\Users\xiongjiawei>pip install selenium==2.48.0 Collecting selenium==2.48.0 Retrying (Retry ...
- 653. Two Sum IV - Input is a BST
Given a Binary Search Tree and a target number, return true if there exist two elements in the BST s ...
- xamarin android如何监听单击事件
在xamarin android单击事件是最基础的事情,看过菜鸟上的android教程时,java写的都是监听事件,为一个按钮,单选按钮.多选按钮的单击事件有三种,前面两种用的非常普遍,也很简易,我这 ...
- Nginx 错误处理方法: bind() to 0.0.0.0:80 failed
Nginx 错误处理方法: bind() to 0.0.0.0:80 failed 今天启动window上的nginx总是报错 错误信息是bind() to 0.0.0.0:80 failed (10 ...