专栏首页杨建荣的学习笔记通过Oracle来辅助MySQL数据问题的恢复(r5笔记第31天)

通过Oracle来辅助MySQL数据问题的恢复(r5笔记第31天)

今天琢磨一个问题,在平时的工作中如果碰到一些不规范的操作,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就是那个士兵,能够完成这个艰巨的任务,部队依旧行进,不会产生其他影响。

本文分享自微信公众号 - 杨建荣的学习笔记(jianrong-notes),作者:r5笔记第31天

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-05-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Oracle Cloud for MySQL的初步测试

    在Oracle Cloud服务的体验中,除了高大上的Oracle 18c能让我眼前一亮,提前享受下未发布版本。

    jeanron100
  • MySQL特有的SQL语句 第一弹

    关于SQL,我们总是会有无穷无尽相关的话题,有时候碰到了一些觉得不错的SQL功能会标记下来,好记性不烂烂笔头,回头来看,自己也收集了不少的点子,但是从整体来...

    jeanron100
  • 11g dataguard使用总结(r5笔记第12天)

    11g的dataguard相比于10g来说,最优越的特性应该算就是active dataguard了,这一点改进在很大意义上促使用户需要把数据库从10g升级到1...

    jeanron100
  • JavaEE三层架构命名示例

    黑泽君
  • 人工智能促进Web开发的五种方法

    Web开发是一个不断变化的领域。用户一直在寻找丰富的体验和个性化的内容。最终,他们想要的是能够提供高度定制的用户体验的智能web应用程序。然而,这对于web开发...

    liuxuewen
  • HTTP协议中几个状态码

    用户7657330
  • 生发棒球帽、宿醉手环、蚊子探测器,今年CES上的那些“智障”产品

    在拉斯维加斯举行的CES已经过去一周了,超过4500个参展商展示了成千上万的产品,其中各种酷炫的新科技产品赚足了眼球。

    大数据文摘
  • 学习 WCF (1)--基础篇

      Windows Communication Foundation (WCF)是一个面向服务编程的综合分层架构。该架构的顶层称为服务模型层(Service M...

    小端
  • 学习 WCF (1)--基础篇

      Windows Communication Foundation (WCF)是一个面向服务编程的综合分层架构。该架构的顶层称为服务模型层(Service M...

    小端
  • MessagePack Java Jackson 序列化和反序列化 POJO 为 MessagePack 的数组类型用来与 msgpack-java:0.6 保持兼容性

    在 msgpack-java 0.6 或者早期的版本中,POJO 在 MessagePack 中被序列化和反序列化为数组变量。

    HoneyMoose

扫码关注云+社区

领取腾讯云代金券