连延迟从库都用不上了,MySQL备份还能恢复吗?
背景 首先交代一下背景,由于某些因素的限制,我们公司目前的备份策略采用的是隔天全备的方案,增量备份则使用的是binlog server的方式,那么如何快速恢复就成为了我们需要思考的问题。 正文 恢复需求 根据我以往的一些经验来说,通常需要从备份恢复数据的场景有如下几种: 被误删库了; 被误删表了,类型为TRUNCATE或者DROP; 被误删列了,类型为ALTER ... DROP COLUMN; 被误删数据了,类型为DELETE或者UPDATE或者REPLACE; 表空间损坏或出现坏块了。 根据场景来说,我们可以大致分为两类: 第一类为不可逆恢复,也就是通常的DDL,比如上述的1、2、3、5等场景; 第二类为可逆的恢复,通常可以利用binlog进行回滚(要求binlog格式为ROW,binlog_image为FULL),也就是对应上述的场景4。 对于第二类的恢复需求一般来说都比较容易处理,可以利用binlog回滚工具,例如业界比较著名的有binlog2sql以及MyFlash等,这里暂不赘述,我们重点来讨论第一类需求。 为了达到快速恢复的目的,业界DBA经常会采用的方式就是部署一个延迟从库来解决,我们公司目前所有的核心DB都部署了延迟从库。但是即便有了延迟从库,假设我们错过了延迟的时间,或者在后续利用延迟从库恢复的时候指定错了位点,导致了误删DDL同样应用到了从库