当前位置: 首页 > 科技观察

就算全库被删,也保证半小时内恢复

时间:2023-03-21 14:08:26 科技观察

近期一篇文章《就这样把根目录删了!!!》引发广泛讨论,《如何防止根目录被删》总结了7种防删方案。还有同学反馈“不小心删除了数据库”,如何快速恢复被删除的数据库就是今天要讨论的话题。【高可用数据库架构】一般来说,数据库集群会是master-slave架构:或者master-master架构:如果此时主库宕机,可以:(1)在上面重建集群一个从库(2)将流量迁移到另一个主库,保证数据安全和服务可用性。但是,如果不小心执行了“删除所有数据库”操作,该命令会同步到其他从(主)库,导致所有数据库上的所有数据丢失。你现在应该怎么办?你可以问问自己,当这种情况发生时当它发生时:(1)数据能恢复吗?(应该没有公司做不到)(2)多久可以恢复数据?确保数据安全是DBA的首要任务。【全量备份+增量备份】常见的数据库安全策略是:全量备份+增量备份。全量备份:定期(比如一个月)对库文件进行全量备份增量备份:定期(比如每天)增量备份binlog如果不小心删除了全量库,可以这样恢复:(1)复制latestfullbackup找到全库,复制回来(文件一般比较大),解压,应用(2)最新fullbackup后,找到每天的增量binlog,复制回来(文件比较多),并依次replay(3)增量备份后,找到执行“deletethewholedatabase”之前的binlog,恢复replay。为确保解决方案的可靠性,建议定期进行恢复演练。方案优点:可以找回数据方案缺点:恢复时间很长。有没有更好更快的恢复方案?【从数据库延迟1小时】利用从数据库延迟1小时可以大大加快“删除整个数据库”时间的恢复。什么是1小时延迟奴隶?如图,添加一个从库。这个从库并没有和主库实时同步,而是每隔1小时和主库同步一次。同步完成后,立即断线1小时,从库会和主库保持1小时的数据间隔。当“删库”事故发生时,只需要:(1)延迟1小时(2)从最近的同步时间开始延迟1小时,找到执行“删库”前的binlog,重试快速恢复完成。方案优点:可以快速检索数据潜在不足:做什么什么?【双1小时延时从库】使用双1小时延时从库可以避免上述“万一,万一,万一”的事故。什么是double1hourdelayslave?如图,两个延迟1小时的slave,他们和master数据库同步数据的时间是“相隔半小时”。这样即使延迟slave在连接主库同步时短时间内发生了“删除全库”的事故,仍然有另一个延迟slave保留了半小时前的数据,让快速恢复。解决方案的优势:数据可以快速恢复,不会发生任何意外。潜在不足:资源利用率有点低。为了保证数据安全,多加了2个延时从库,降低了从库的利用率。【提高从库效率】1小时延迟的从库也不是完全没用。对于一些“允许延迟”的业务,可以使用延迟1小时的slave,例如:(1)运营后台,产品后台(2)BI用于数据同步(3)研发用于数据的Sampling,research,但是它需要注意的是,毕竟这是一个从库,只能提供“只读”服务。【总结】保证数据安全是DBA的头等大事,需要做到:(1)全量备份+增量备份,定期进行恢复演练,但这种方案恢复时间长,对系统影响大availability(2)延迟1小时,延迟1小时双副本可以大大加快数据库恢复时间(3)我个人建议延迟1小时就够了,后台只读服务可以延迟1小时提高资源利用率【本文】为专栏作者“58神剑”原创稿件,转载请联系原作者】