关于实现MySQL闪回的一个取巧的办法

            最近有关注MySQL的一些备份,恢复的事情,想试着在MySQL上类似于Oracle的闪回(flashback)的功能
            首先想到的是解析Binlog,然后逆向编写对应的SQL,去网上翻了翻资料,发现已经有大神实现了!但是仔细想了想,不管是自己写,还是直接用别人的成果,好像都挺麻烦的,毕竟懒癌晚期,找点简单的办法来取巧好了_(:з」∠)_

-----------------------------------------------------关于闪回特性的时机应用场景的个人理解-------------------------------------------------------
            从实际情况出发,闪回提供的数据恢复能力是相对偏弱,而且时间点也是相对不远,可能就是在几分钟前,但是闪回强在在数据恢复时间照比正常的恢复流程快很多
            能用到闪回特性的实际场景,基本上就是DBA or 相关的技术人员在操作数据库的时候,由于失误 or 疏忽,在一些DDL或者DML语句中没有加上where,或者相似的表名写错了
            PS:谁都有失误的时候T_T
            在这种情境下,错误发生的时间点之后,且相关人员能第一时间发现,那么就可以用闪回了!
            取巧的办法就在这个地方"错误发生的时间点之后,且相关人员能第一时间发现",第一时间发现说明相隔时间并不长,那么,MySQL从库的数据如果存在一段时间的延迟,相关人员就能从从库直接导出相对应的数据,在主库上面进行恢复了~

-----------------------------------------------------------------这才是这篇博客的主题------------------------------------------------------------------
            如何让从库对主库保持一个固定的延迟?
            一般来说,按照网上的主从配置,配完之后,show slave status\G;之后,会在底部显示如下信息
              
            翻阅MySQL的官方文档,里面有提到,在change master的设置里面,有一项master_delay=x秒的设置,把这一项添加进去以后,再启动主从,会变成如下信息
         
            当然细心的人会发现这其实是两个不一样的MySQL,不过这并不影响测试,不要在意这些细节....
            那么,这个参数设定以后,真的是延迟了600s再更新主库的数据变更么?我们可以来试试~
            首先在看一下三个库的表结构,都是七张表,最左边的是主库,中间是延时从库,最右边的是另外一个普通的从库...
         
            然后再主库上面新建一张表~
         
          
            然后看一下时间和效果~
         
            如截图可以看到延时从库并没有更新主库上的操作,而普通的从库已经更新了~这时候再去看一下延时从库的status~
         
            还差好几分钟才会更新~
            然后无聊的博主怒开了一波Dota2的不朽II箱子.....纯金不朽碎骨锤一发~看看时间也差不多了,查看一下延时从库的status~
         
            延时从库的更新在十分钟以后如约而至,然后继续回到了空闲状态~
         

            所以用这种延时从库的办法,能自由的设置缓冲时间,来恢复错误的操作~
---------------------------------------------------------------------------华丽的分割线-----------------------------------------------------------------------------

            诚然,最开始想到的并不是这种官方的方法,第一时间是找了percona-toolkits去求助,使用里面的pt-slave-delay来达到延时从库的效果
            pt-slave-delay的实现方法也很简单,定时在从库上执行stop slave和start slave,简单明了~
            关于怎么去安装和使用pt-slave-delay就不在描述了,毕竟,官方的方法更加简单一些~不过percona-toolkits确实是一套很不错的工具集~
---------------------------------------------------------------------------华丽的全文完-----------------------------------------------------------------------------

时间: 2024-10-14 12:23:57

关于实现MySQL闪回的一个取巧的办法的相关文章

MySQL 闪回原理与实战

DBA或开发人员,有时会误删或者误更新数据,如果是线上环境并且影响较大,就需要能快速回滚.传统恢复方法是利用备份重搭实例,再应用去除错误sql后的binlog来恢复数据.此法费时费力,甚至需要停机维护,并不适合快速回滚.也有团队利用LVM快照来缩短恢复时间,但快照的缺点是会影响mysql的性能. MySQL闪回(flashback)利用binlog直接进行回滚,能快速恢复且不用停机.本文将介绍闪回原理,给出笔者的实战经验,并对现存的闪回工具作比较.   开胃菜 某天,小明因种种原因,误删了大批线

MySQL主从同步问题&延时从库的"闪回"

延时从库联动贴:http://blog.itpub.net/29510932/viewspace-1677278/   (渣排版,以后改改_(:з」∠)_)-------------------------------------------------------------------------------------正文------------------------------------------------------------------------------------

一个闪回区报警的数据恢复(r11笔记第63天)

    今天在火车上接到一个电话说,数据库有个报警,让我看看是怎么回事. 看着报警信息一直重复出现,看来是有些问题了.     这是一个统计库,出现了DG相关的报警(自定义配置的),看起来是备库端接收归档的时候出现了问题. Error 270 creating remote archivelog file 'sgstatdb3' 我们知道备库端其实是有一个80%的阈值控制闪回区的,当时限于在火车上,网络,信号不顺畅,所以让同事帮忙看了下,大体是说闪回区满了,但是系统层面设置了crontab定期去

Oracle 9i中的一个闪回查询操作实例

在利用闪回功能前需要确认: 1.用户有对dbms_flashback包有执行权限! 2.进行闪回查询必须设置自动回滚段管理,在init.ora设置参数UNDO_MANAGEMENT=AUTO,参数UNDO_RETENTION=n,决定了能往前闪回的最大时间,值越大就需要越多Undo空间. Oracle 9i中闪回查询操作实例 查看Oracle中Delete和Commit操作的流程分析 例:Oracle 9i的Flashback Query操作. (1)创建闪回查询用户 SQL> create u

闪回原理测试(二)(r11笔记第23天)

    对于闪回部分,Oracle本身提供了非常多相关的特性,我个人对于闪回数据库这个特性最为喜爱,尤其是应用再Data Guard环境中,真是一大杀器.     而对于DML的闪回部分其实也相对比较容易理解,毕竟就是原操作的逆操作,之前通过logminer的方式来读取redo来间接得以印证.Oracle闪回原理-Logminer解读redo(r11笔记第17天)     但是对于DDL的闪回,这个特性真是非常强悍了.比如一个truncate操作,它的逆操作改怎么定义,就很难去界定了.当然这个里

Oracle闪回原理测试(三)(r12笔记第16天)

 对于Oracle的闪回,很多朋友也问过问,到底是怎么玩的?如果自己做过一些闪回数据库的操作,就会发现这个功能非常强悍.   Flashback DML的操作其实还蛮容易理解的,但是Flashback DDDL那可就是另外一个level了,我们大概了解一下MySQL里面的闪回就会发现,真要实现无缝的全闪回,确实有很多的细节和场景需要考虑.而Oracle作为一个成熟的商业软件,是不希望我们了解很多底层的细节的,用着好就行,所以如果你想得到一些闪回更细节的东西,这个渠道就非常的窄,我们之前也测试了两

巧用闪回查询来分析事务延迟的问题

   前段时间有个开发的同事向我咨询一个问题,     开发同事:Oracle会存在一个用户插入数据,已经提交了:但是另外一个用户还查询不到吗?都是同一张表     jeanron:   不会的.     开发同事: 我们现在一个用户写入,程序日志是说已经写入:可是读取的用户还读取不到,在线延迟5分钟可能的问题在哪儿?或者你帮忙监控一下?     jeanron:   是Oracle吗,MySQL还可能有这种情况     开发同事: Oracle,MySQL是什么情况下会这样?     jean

浅谈ORACLE 10G 闪回恢复区

oracle|恢复   何为闪回恢复区 Oracle 10g 有一项新功能称为:自动的基于磁盘的备份与恢复( Automatic Disk-Based Backup and Recovery ).实现该功能的基础为本文要讲述的闪回恢复区( Flash Recovery Area ).闪回恢复区是 Oracle 10g 中的新事物.简单的说,闪回恢复区是一块用以存储恢复相关的文件的存储空间.允许用户集中存储所有恢复相关的文件.   闪回恢复区可以放在如下几种存储形式上: l         目录

Oracle Database 10g:闪回版本查询

oracle 不需要设置,立即识别对行的所有更改 在 Oracle9i Database 中,我们看到它推出了以闪回查询形式表示的"时间机器".该特性允许 DBA 看到特定时间的列值,只要在还原段中提供该数据块此前镜像的拷贝即可.但是,闪回查询只提供某时刻数据的固定快照,而不是在两个时间点之间被更改数据的运行状态表示.某些应用程序,如涉及到外币管理的应用程序,可能需要了解一段时期内数值数据的变化,而不仅仅是两个时间点的数值.由于闪回版本查询特性,Oracle Database 10g