Mysql存储过程历史表备份

应用背景

1.采集系统需要将实时数据存入历史表,利用mysql的事件,每小时存一次采集数据;
2.每个月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

原文地址:https://www.cnblogs.com/JerryMouseLi/p/10783147.html

时间: 2024-10-12 04:49:43

Mysql存储过程历史表备份的相关文章

企业Shell实战-MySQL分库分表备份脚本

本文来自http://www.xuliangwei.com/xubusi/252.html 免费视频讲解见 http://edu.51cto.com/course/course_id-5064.html 企业Shell实战-MySQL分库分表备份 今天是2015年的最后一天,大家都开心的跨年,而我还在苦逼的呵呵-省略 此处内容来自老男孩教育oldboy以及老男孩26期王续精彩分享整理而来  为表示感谢,特整理此篇博文分享给大家! 项目联系笔者QQ:572891887   也可以加入架构师交流群:

(转)企业Shell实战-MySQL分库分表备份脚本

本文来自http://www.xuliangwei.com/xubusi/252.html 免费视频讲解见 http://edu.51cto.com/course/course_id-5064.html 企业Shell实战-MySQL分库分表备份 今天是2015年的最后一天,大家都开心的跨年,而我还在苦逼的呵呵-省略 此处内容来自老男孩教育oldboy以及老男孩26期王续精彩分享整理而来  为表示感谢,特整理此篇博文分享给大家! 项目联系笔者QQ:572891887   也可以加入架构师交流群:

分享一个MySQL分库分表备份脚本(原)

分享一个MySQL分库备份脚本(原) 开发思路: 1.路径:规定备份到什么位置,把路径(先判断是否存在,不存在创建一个目录)先定义好,我的路径:/mysql/backup,每个备份用压缩提升效率,带上时间方便整理 2.取数据库:抓取数据库名称,我用的awk和grep配合取数据库的名称(如果想按照表备份可以再细化一下)注意要用mysql -e选项 这样才能做成脚本 3.系统环境变量:因为用到了函数,所以非系统内置的命令 最好在脚本里面用 . /etc/profile  把系统当前的环境变量传过来

MySQL 存储过程检测表是否存在

SQL语句实现: SELECT COUNT(*) FROM information_schema.`TABLES` WHERE TABLE_NAME='youTableName'; where子句中,表名是字符串类型,要加单引号. MySQL存储过程中 函数实现: CREATE DEFINER = `root`@`localhost` FUNCTION `tableExists`(`tName` varchar(30))  RETURNS tinyint(4) BEGIN DECLARE tab

mysql分库分表备份

一.单独备份数据库 mysqldump -uroot -poldboy oldboy >/opt/oldboy.sql         最简单的备份 1)  mysql基于myisam引擎 mysqldump -uroot -poldboy  -B -x  -F oldboy | gzip >/opt/oldboy.sql.gz 2)  5.5以后默认是innodb(推荐) mysqldump -uroot -poldboy  -B  -F --single-transactio oldboy

mysql分库.分表备份

1.mysql的分库备份 myuser=root mypass=yzg1314520 mycmd="mysql -u$myuser -p$mypass " mydump="mysqldump -u$myuser -p$mypass" for database in  mysql test do $mydump $database   > $database_$(date +%F).sql tar -zcvf $database_$(date +%F).tar.

实现MySQL分库分表备份的脚本

1)准备测试数据:通过写脚本批量建库建表并插入测试数据. [[email protected] scripts]# cat ceshi.sh #/bin/bash PATH="/usr/local/mysql/bin:$PATH"                 #定义mysql命令所在路径 MYUSER=root                                                     #定义数据用户名 DBPATH=/server/backup   

Shell脚步之MySql分库分表备份

前言 数据备份的重要性已经不用过多强调了.这篇文章我们就以MySQL数据进行演示如何通过Shell脚步进行MySQL数据库的分库分表备份. 要求 Linux命令要求比较熟悉,Shell脚步语法规则也要熟悉,MySQL的数据库备份命令要比较熟悉.下面也会提到,如果有不懂得希望可以自行查阅资料学习. 命令窗口查询MySQL数据库列表 上面我们就通过Linux命令窗口查询到了MySQL的数据库列表 去除MySQL自带数据库获取目标业务数据库列表,查看表列表 备注:通过过滤掉MySQL自带数据库,那么就

MySQL分库分表备份脚本

vim /data/mysqlback.sh #! /bin/bash BAKPATH=/data/mysql-back MYUSER=root MYPASS="123456" SOCKET=/var/lib/mysql/mysql.sock MYCMD="mysql -u$MYUSER -p$MYPASS -S $SOCKET" MYDUMP="mysqldump -u$MYUSER -p$MYPASS -S $SOCKET -x -F -R"