Mysql存储过程历史表备份
应用背景
SCADA采集系统需要将实时数据存入历史表。问题1:如何更简单的添加历史数据?2.海量历史数据,比如年数据,如何快速筛选 画曲线?
- 利用mysql的事件,每小时存一次采集数据;
- 每月备份历史表,并且将原表清空。每个月1号凌晨1点,将历史表备份,名称命名为his_aic_20190501 01:00,将原表清空。
1.历史表备份
1.1存储过程
BEGIN
INSERT INTO his_dic (ParentID,PointID,DICName,DICValue,StateDesc,AlarmThreshold,AlarmLevel,AlarmEnable,UpdatedTime)
select ParentID,PointID,DICName,DICValue,StateDesc,AlarmThreshold,AlarmLevel,AlarmEnable,UpdatedTime
FROM dic on duplicate key update
ParentID=VALUES( ParentID),PointID=VALUES(PointID ),DICName=VALUES(DICName ),DICValue=VALUES(DICValue ),StateDesc=VALUES(StateDesc ),AlarmThreshold=VALUES( AlarmThreshold),AlarmLevel=VALUES(AlarmLevel ),AlarmEnable=VALUES( AlarmEnable),UpdatedTime=VALUES(UpdatedTime );
INSERT INTO his_doc (ParentID,PointID,DOCName,DetectDOStatus,DOCValue,StateDesc,ControlEnable,UpdatedTime)
SELECT ParentID,PointID,DOCName,DetectDOStatus,DOCValue,StateDesc,ControlEnable,UpdatedTime
FROM doc on duplicate key update
ParentID=VALUES(ParentID ),PointID=VALUES(PointID ),DOCName=VALUES(DOCName ),DetectDOStatus=VALUES( DetectDOStatus),DOCValue=VALUES(DOCValue ),StateDesc=VALUES(StateDesc ),ControlEnable=VALUES( ControlEnable),UpdatedTime=VALUES(UpdatedTime );
INSERT INTO his_aic (ParentID,PointID,AICName,AICValue,Unit,sAICValue,MaxAICValue,MinAICValue,`Enable`,UpdatedTime)
SELECT ParentID,PointID,AICName,AICValue,Unit,sAICValue,MaxAICValue,MinAICValue,`Enable`,UpdatedTime
FROM aic on duplicate key update
ParentID=VALUES(ParentID ),PointID=VALUES(PointID ),AICName=VALUES(AICName ),AICValue=VALUES( AICValue),Unit=VALUES(Unit ),sAICValue=VALUES(sAICValue ),MaxAICValue=VALUES(MaxAICValue ),MinAICValue=VALUES(MinAICValue ),`Enable`=VALUES( `Enable`),UpdatedTime=VALUES(UpdatedTime);
END
1.2使用说明
步骤1 使用navicat工具管理Mysql,函数右键新建函数,在跳出得向导框选择过程,点击下一步。

步骤2 这里不需要任何操作,直接点击完成,因为没有参数传入传出。

步骤3 将上面的存储过程代码复制进如下图框,点击运行即可。

步骤4点击保存,输入名称。

结果运行结果如下。

2.创建每隔一小时保存历史数据任务
2.1 建立事件任务event_To_His:
CREATE EVENT if not exists event_To_His
on schedule every 1 hour
on completion preserve
do call To_His();
2.2 使用说明
步骤1选择自己的数据,点击右键,选择cmd模式输入。

步骤2将以上代码拷贝运行即可。

结果运行结果如下。

备注:
如果报错查看event是否开启: show variables like '%sche%';
将事件计划开启: set global event_scheduler=1;
关闭事件任务: alter event e_test ON COMPLETION PRESERVE DISABLE;
开户事件任务: alter event e_test ON COMPLETION PRESERVE ENABLE;
3.历史表按月备份
3.1存储过程
BEGIN
create table his_aic_temp like his_aic;
set @i=now();
set @sqlstr=CONCAT('rename table his_aic to `his_aic_',cast(@i as char),'`');
select @sqlstr;
PREPARE renameHisBak FROM @sqlstr;
EXECUTE renameHisBak;
rename table his_aic_temp to his_aic;
create table his_dic_temp like his_dic;
set @i=now();
set @sqlstr=CONCAT('rename table his_dic to `his_dic_',cast(@i as char),'`');
select @sqlstr;
PREPARE renameHisBak FROM @sqlstr;
EXECUTE renameHisBak;
rename table his_dic_temp to his_dic;
create table his_doc_temp like his_doc;
set @i=now();
set @sqlstr=CONCAT('rename table his_doc to `his_doc_',cast(@i as char),'`');
select @sqlstr;
PREPARE renameHisBak FROM @sqlstr;
EXECUTE renameHisBak;
rename table his_doc_temp to his_doc;
END
3.2使用说明
详见1.2
4.建立每个月的第一天凌晨1点执行事件
4.1建立任务event_HistoryBak:
CREATE DEFINER=`root`@`localhost`
EVENT `event_HistoryBak`
ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY),INTERVAL 1 MONTH),INTERVAL 1 HOUR)
ON COMPLETION PRESERVE ENABLE
DO call HistoryBak();
4.2使用说明
详见2.2
QQ群:20120449
Mysql存储过程历史表备份的更多相关文章
- MySQL分库分表备份脚本
MySQL分库备份脚本 #脚本详细内容 [root@db02 scripts]# cat /server/scripts/Store_backup.sh #!/bin/sh MYUSER=root M ...
- (转)企业Shell实战-MySQL分库分表备份脚本
本文来自http://www.xuliangwei.com/xubusi/252.html 免费视频讲解见 http://edu.51cto.com/course/course_id-5064.htm ...
- MYSQL 存储过程 多表更新异常捕捉和异常处理方式
今天在做MYSQL 存储过程 多表更新的功能 多表更新时候注意事项 1.首先是确保多表更新能够一次执行,途中没有哪个表的sql语句错误 2.上线后修改表结构及字段,请注意检查是否影响mysql 过 ...
- 分享一个MySQL分库分表备份脚本(原)
分享一个MySQL分库备份脚本(原) 开发思路: 1.路径:规定备份到什么位置,把路径(先判断是否存在,不存在创建一个目录)先定义好,我的路径:/mysql/backup,每个备份用压缩提升效率,带上 ...
- mysql 存储过程 动态表名
今天写存储过程时,遇到要将表名最为参数的问题,如果不涉及到游标的话,使用prepare可以解决问题,但是,动态表名要运用在游标中的话,则prepare就得靠边站了. 集众人之智慧,最后,使用临时表解决 ...
- Mysql不锁表备份之Xtrabackup的备份与恢复
一.Xtrabackup介绍 MySQL冷备.热备.mysqldump都无法实现对数据库进行增量备份.如果数据量较大我们每天进行完整备份不仅耗时且影响性能.而Percona-Xtrabackup就是为 ...
- mysql 分库分表备份脚本
#!/bin/bash USER=root #用户 PASSWORD=123456 #密码 MYSQL_PATH=127.0.0.1 #地址 MYSQL_BIN=/bin/mysql MYSQL_DU ...
- mysql存储过程导入表
运用存储过程,把用户表一数据导入用户表二 DELIMITER @@ CREATE PROCEDURE imp_to_user2() BEGIN – 声明一个标志done, 用来判断游标是否遍历完成 D ...
- MySQL 存储过程创建表
创建 CREATE PROCEDURE Pro_IsExistTable(ableName varchar(100),out outputParam int)BEGINset @csql=conca ...
随机推荐
- Microsoft源代码注释语言(SAL)提供设置批注
Microsoft源代码注释语言(SAL)提供设置批注可以使用描述的功能如何使用其参数,它对其假设并确保它使其在完成. 批注可标头文件 <sal.h>定义. Visual Studio C ...
- FileReader读取本地文件
FileReader是一种异步读取文件机制,结合input:file可以很方便的读取本地文件. 一.input:type[file] file类型的input会渲染为一个按钮和一段文字.点击按钮可打开 ...
- 文本分类学习(六) AdaBoost和SVM
直接从特征提取,跳到了BoostSVM,是因为自己一直在写程序,分析垃圾文本,和思考文本分类用于识别垃圾文本的短处.自己学习文本分类就是为了识别垃圾文本. 中间的博客待自己研究透彻后再补上吧. 因为获 ...
- 微信小程序入门一
基本的准备工作 -知识储备 --基础:HTML+JS+CSS --进阶:React.Vue -工具安装 --工具由微信官方提供 ---下载地址:https://github.com/zce/weapp ...
- oracle 游标简单示例
1.游标的概念以及作用 游标(Cursor)可以使用户想操作数组一样对查询出来的结果集进行操作,可以形象的看做一个变动的光标,其实际行是一个指针,它在一段Oracle存放数据查询结果集或数据 操作集的 ...
- Python_替换当前目录下文件类型
''' 将当前目录的所有扩展名为html的文件重命名为扩展名为htm的文件 方法一 ''' import os file_list=os.listdir('.') for filename in fi ...
- 读《图解HTTP》有感-(返回结果的HTTP状态码)
写在前面 HTTP状态码是由服务端产生,用于告诉客户端,服务端处理结果的编码 正文 1.状态码的作用是什么?具有什么特征? 状态码的作用是当客户端向服务器发送请求时,描述服务器的响应结果(如:服务器正 ...
- Qtp自动测试工具
QTP是基于GUI界面的自动化测试工具,用于系统的功能测试. QTP录制的是鼠标和键盘的消息.QTP录制回放时基于windows操作系统的消息机制.QTP在录制时监听应用程序的消息,监听到之后把消息放 ...
- java中判断文件及所在文件夹是否存在
File file=new File(filePath);if (file.exists()) {}else { File fileParent =new File(file.getParent()) ...
- thymeleaf 专题
Thymeleaf 之 内置对象.定义变量.URL参数及标签自定义属性 如标题所述,这篇文章主要讲述Thymeleaf中的内置对象(list解析.日期格式化.数字格式化等).定义变量.获取URL的参数 ...