原文:

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存储过程历史表备份相关推荐

  1. mysql 不锁表备份_Mysql不锁表备份之Xtrabackup的备份与恢复

    一.Xtrabackup介绍 MySQL冷备.热备.mysqldump都无法实现对数据库进行增量备份.如果数据量较大我们每天进行完整备份不仅耗时且影响性能.而Percona-Xtrabackup就是为 ...

  2. MySql定期备份数据到历史表的解决方案

    前言 互联网项目最大不瓶颈还是在于数据库,80%的数据请求只针对20%的数据:特别是电商项目,体现的更为明显,大量的数据请求,即使MySql在一主多从,读写分离,使用了Elasticsearch.Me ...

  3. mysql数据库分表备份脚本_MySQL分库分表备份脚本

    MySQL分库分表备份脚本 vim /data/mysqlback.sh #! /bin/bash BAKPATH=/data/mysql-back MYUSER=root MYPASS=" ...

  4. mysql数据库分表备份脚本_MySQL分库分表备份数据库脚本的操作

    MySQL分库分表备份数据库脚本的操作 发布时间:2020-05-26 16:52:23 来源:51CTO 阅读:134 作者:三月 本篇文章给大家主要讲的是关于MySQL分库分表备份数据库脚本的操作 ...

  5. mysql 5.7 差异备份_MySQL 5.7 新备份工具mysqlpump 使用说明 - 运维小结

    之前详细介绍了Mysqldump备份工具使用,下面说下MySQL5.7之后新添加的备份工具mysqlpump.mysqlpump是mysqldump的一个衍生,mysqldump备份功能这里就不多说了 ...

  6. Mysql运维管理-Mysql增量备份及分库分表备份数据恢复实战12

    1. MySQL数据库的备份与恢复 1.1 Mysqldump的工作原理? 利用mysqldump命令备份的过程,实际上就是把数据从mysql库里以逻辑的sql语句的形式直接输出或者生成备份的文件的过 ...

  7. mysql binlog 备份_Mysql数据库的增量备份与还原

    一.备份的目的 做灾难恢复:对损坏的数据进行恢复和还原. 二.备份需要考虑的问题 可以接受丢失多少数据: 恢复数据的时间要多久: 恢复数据时是否持续提供服务: 恢复的对象,是一个库,多个表,单个表,还 ...

  8. mysql全备和指定库和表备份,mysql日志的分类简介和作用, mysql加速跳过域名解析,mysql权限授予与收回,数据库实用篇~~Tring

    mysql改密,重置,备份,权限和日志 改密~ 修改密码 重置密码 步骤 数据库备份 用到的命令: 可加参数 : -A 参数 例子: -B 参数 例子: 备份指定数据库的某个表 恢复表 创建用户 操作 ...

  9. mysql存储过程表_mysql 存储过程,表

    drop procedure if exists UP_SYS_GetBillId; /* 创建:Jaxk 2017-03-31 功能:get bill id */ create procedure ...

最新文章

  1. SAP PM入门系列32 - S_ALR_87013432 Display Confirmations
  2. python过滤多个开头结尾
  3. 基于注解的IOC案例
  4. Python+Opencv实现自动化阅卷
  5. JavaScript代码片段
  6. 其实没事做,写写博客也不错的
  7. SQL SERVER中的纵横查询
  8. Python中*args和**kwargs的解释
  9. 滴滴接盘小蓝单车,押金问题谁来负责?
  10. 接口性能测试+调优+性能指标
  11. JS 三级联动之 省市县。
  12. 检测应用位于后台,并弹出手势解锁,解锁成功进入主界面
  13. amd服务器cpu性能排行榜,AMD 32核服务器CPU完胜Intel 22核顶级CPU
  14. 助教日志_【沈阳航空航天大学软件工程 1,2班】期末排行
  15. python画图显示中文加标题控制字体
  16. 我国有关信息方面的法律法规
  17. 笔记本怎么用android,电脑上如何使用Android系统
  18. 用旭日图展示数据的三种方法
  19. 解决方案:No space left on device
  20. 截至4月印度可再生能源装机超57GW 光伏装机12.5GW

热门文章

  1. 创业 4 年获近 7000 万美元融资,53 岁老程序员 all in 开源
  2. 夯实数字化转型算能基石 构建洛阳银行核心云
  3. 这 10 行比较字符串相等的代码给我整懵了,不信你也来看看
  4. 达摩院2020十大科技趋势发布:云成IT技术创新中心
  5. 腾讯云全面更新数据智能服务全景图!
  6. 电大1253c语言程序设计考试题,电大1253《C语言程序设计》开放大学期末考试试题2020年1月(含答案)...
  7. git 撤销挂起的更改_小姐姐带你用Git
  8. 网站建设中 模板_网站建设之模板网站的缺点
  9. 如何用c语言程序写一段英文字母,菜鸟求助,写一个随机输出26个英文字母的程序...
  10. mysql 默认时间字段 1067,mysql替datetime类型字段设置默认值default