首页 / MYSQL / Mysql存储过程历史表备份
Mysql存储过程历史表备份
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Mysql存储过程历史表备份,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3894字,纯文字阅读大概需要6分钟。
内容图文
应用背景
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
Mysql存储过程历史表备份
标签:src update rom 事件 报错 control now() desc mina
本文系统来源:https://www.cnblogs.com/JerryMouseLi/p/10783147.html
内容总结
以上是互联网集市为您收集整理的Mysql存储过程历史表备份全部内容,希望文章能够帮你解决Mysql存储过程历史表备份所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。