博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过Oracle来辅助MySQL数据问题的恢复
阅读量:6415 次
发布时间:2019-06-23

本文共 1543 字,大约阅读时间需要 5 分钟。

今天琢磨一个问题,在平时的工作中如果碰到一些不规范的操作,drop,truncate,delete,恢复起来还是很困难的,drop操作在oracle中如果开启了recycle bin还是基本安全的,delete操作可以借助flashback delete操作,可能有些更细微的操作update,insert等等操作导致了问题,需要做数据修复的时候,这个时候可以使用flashback query来辅助,如果来一个truncate,那就没辙了,其实在truncate操作完成后,一般来说数据还都是在数据文件里的,这个时候可以借助第三方的数据恢复工具来尝试恢复,这个时候数据恢复就不是毫秒级了,容忍度在分钟甚至小时都是没有办法的事情。
不过在oracle中,如果你之前开启了闪回数据库功能,那truncate的数据就能找回来了。但是话说过来,整个系统都让重启给弄停了,这个影响可能更大。如果不使用flashback database,直接通过dataguard来做时间点恢复或者其它的标准恢复到数据删除之前,也是一种方法。
所以说在oracle中对于数据的恢复方法很多,使用场景也可以根据需要来选择。
在MySQL中数据恢复可供选择的方案相对就比较少了。不过有一个亮点就是MySQL中的redo日志是可读的,mysqlbinlog可以很轻松地解析出来里面的内容。不过truncate,drop,一些DML失误操作场景来说,对于MySQL来说就比较困难了。
 一旦发生了问题,做数据的恢复就只能借助于最近的备份了,需要相应的备份,然后在最近的备份基础上通过解析相关的binlog,直到把数据变更时间点的数据恢复。
这个过程总体来说还是需要不少的时间的,首先就是判断备份和binlog的时间点,可以在其它测试环境中完成,需要花费的时间应该不短。
我想了下面这个方案,把oracle和mysql结合起来,充分利用Oracle的强大的闪回功能,可能这种方案对于很多数据恢复都有不少的亮点。
还没有在本地测试,因为也需要一些额外的定制和数据类型映射,所以只是一个大概的思路。
首先还是保持MySQL原有的架构,一个主库,两个备库。因为主库中的binlog是做数据同步的关键,所以可以考虑设置一个路径做sql解析,sql解析还是使用binlog,然后再做适当的变更。这个过程可以是一个异步的过程,然后和Oracle结合起来部署到oracle中的schema中。
MySQL中的数据量相对来说还不是很大,所以可以考虑多个MySQL database和一个Oracle中的多个schema映射起来,数据类型可以适当做一些类型映射,比如,MySQL中的big int,small int等和oracle中的number直接映射。varchar和varchar2映射等等。
数据到位之后,就可以考虑通过各种闪回特性来做数据的恢复了。发生了truncate之类的操作可以使用flashback database来恢复,drop操作可以通过recycle bin,flashback database或者基于时间点等来恢复。delete可以通过闪回删除,闪回查询等来恢复。update可以通过闪回查询来恢复等等。得到了相应的技术局之后,可以直接导出csv文件,或者insert语句来。在MySQL中通过mysqlimport或者insert来完成数据的部署。
这个过程中可以使得MySQL端始终保持前行,可以打一个比方,比如一个部队在行军,结果突然某个军官发现自己的地图没带,落下半路上了,这个时候可以派一个士兵骑马去取地图。这个时候oracle就是那个士兵,能够完成这个艰巨的任务,部队依旧行进,不会产生其他影响。

转载地址:http://jacra.baihongyu.com/

你可能感兴趣的文章
比赛总结(轻工业学院校赛)
查看>>
模板:插头dp
查看>>
4. Brackets 前端编辑器试用
查看>>
10.Action中的method属性
查看>>
struts 中的一些琐碎的配置
查看>>
HDU 4433 locker(12年天津,DP)
查看>>
linq to sql 简单的增删改查例子。
查看>>
Javascript sleep 函数
查看>>
【05】react 之 组件state
查看>>
个人总结-Alpha阶段
查看>>
python学习遇到的英文词汇
查看>>
PHP求职宝典系列——PHP Web 编程篇
查看>>
[转] 多线程死锁调试小技巧
查看>>
react-native run-android Starting: Intent Error type 3 Error: Activity class does not exist
查看>>
iOS开发之#impor与#include的区别
查看>>
很奇怪,为什么一直无法坚持写自己的博客?
查看>>
asp.net 2.0中新增的web.config的默认namespace功能 (转)
查看>>
江西财经大学第一届程序设计竞赛 F题 -解方程
查看>>
C#项目单步调试莫名结束问题
查看>>
深入理解C#中的IDisposable接口(转)
查看>>