三、 云上备份恢复能力与场景
下图为云数据库RDS备份恢复的简单流程。
对实例进行备份系统时,要合理安排全量与增量备份的频率。上图中有两个slave节点,全量备份在slave上做,增量备份在每个节点上进行,全量和增量备份均上传到OSS,上传完之后本地binlog即可删除。云上提供了相关参数的选择,比如本地保留多久、保留多少文件,以减少空间占用。另外,云上提供了一键化的功能,比如快速恢复到任意时间点等。
云上数据恢复的其他场景有:
• 恢复全量数据(克隆实例):将任意时间点的数据完整地恢复/克隆到全新实例。
• 库表恢复:将指定库/表恢复到原或新实例到任意时间点。
• 应急恢复(沙箱实例):利用CDM技术将数据快速恢复至DBS。
• DMS数据追踪恢复:比如误删了一条数据,如何恢复?只需要提供时间点以及做了哪些表的操作,DMS会找到相关binlog反向生成回滚SQL,追踪完的数据可批量生成回滚脚本,最终执行到数据库中完成数据修复。最终能否成功追恢复,取决于Binlog的保留时长,不同管控模式的Binlog保留时长不一样。
开启回收站功能后,如果删除了一张表,则该表会被移至_recycle_bin_文件下,生成格式为_innodb_<SE private id>的一个对象,索引也会随着移动。
我们提供了dbms_recycle工具包,可以对回收站里的表执行查看、清除或恢复操作。上图右侧为相关参数与命令。
Ali SQL还提供了闪回功能,可以通过SQL语句查询或恢复指定时间点的数据,保证在误操作后可以快速获取历史数据。其原理如下:
假设T1时刻A数据值为50,而后变更为100,会记录A=50(前镜像)到undo log,T2时刻commit。过了一段时间后,如果要在T3时刻查询T1时刻A的值,则会对比LSN值,如果数据页的LSN>T1,则表明数据在T1后修改过,需要在undo中寻找修改之前的值,undo中小于等于T1时刻的最新时刻的值为需要的值。
闪回功能不支持跨DDL查询,只支持InnoDB引擎的表。
能够查询多久之前的数据,依赖于undo表的保留时长。保留时间越长,空间占用越大,因此,AliSQL提供了最大占用磁盘空间值参数。保留时长与最大占用磁盘空间两个参数搭配使用,能够保证在安全范围内提供最长时间的历史查询。