居然可以同时拥有任意门和时光机?!RDS应急恢复满足你

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
简介: 作者:阿里云数据库高级技术专家 时勤

快速恢复到任意时间点

在动漫哆啦A梦里,有两个让人记忆犹新的神奇法宝:可以直接到达目的地的任意门,和回到过去任何时间的时光机。动漫中的法宝与这篇介绍数据库备份的技术文章有什么关系呢?仔细琢磨一下,在数据库备份领域,这两点不恰好用户梦寐以求的两项功能吗:


  • 快速恢复(数据立即可用):对于构建高可用的在线服务意义重大。一旦在线服务的数据库故障,用户希望尽可能快速的恢复新的数据库。当然在数据备份领域,有专门衡量恢复速度的指标RTO(Recovery Time Objective),指从开始恢复到完成恢复的时长。
  • 恢复到任意时间点:意义在于数据管理的健壮性。由于代码bug或人工误操作产生的脏数据,是无法通过恢复最新数据修正的,必须恢复到历史时间点,或根据历史时间点的数据进行在线数据订正。通常恢复的数据所对应的历史时刻,与期望恢复的时刻是有时差的,数据备份领域为了衡量这个时差的大小,也有对应的衡量指标是RPO(Recovery Point Objective)。狭义的RPO指可恢复时间点与当前时间的时差,而本文探讨的广义RPO概念,是指可恢复时间点与任意历史时间点(包含当前时间)的时差。


正如哆啦A梦需要用两个不同的法宝,分别实现两种不同的目标。数据备份系统,              通常会使用不同的技术方案分别实现低RTO或低RPO,而难以两者兼得,即很难做到恢复到任意时间点并立即可用。我们以阿里云数据库RDS为例:


  • RDS灾备实例:这项功能基于日志实时同步技术,实现多个RDS实例之间的实时同步。当原实例发生故障,业务都可以快速切换使用灾备实例,这就体现了“恢复数据立即可用”,即低RTO。然而灾备实例只能提供当前时间点的灾备恢复,无法回滚数据到过去任意时间点。当用户原实例写入了脏数据,或执行了误操作,灾备实例的数据也会同步引入了脏数据和误操作结果。因此RDS的灾备实例功能,无法做到指定任意时间点的低RPO。另外灾备实例需要用户承担两个RDS的成本,通常成本远高于仅存储备份数据的方案,这也成为用户采用该方案的顾虑之一。

image.png

  • RDS备份恢复:这项功能基于数据库的冷备份和日志备份技术,通过备份数据恢复以及日志回放,实现创建一个过去任意时间点的实例(也成为RDS克隆实例),这恰好符合“恢复到任意时间点”(低RPO)的需求。然而RDS备份恢复功能并不是立即可用的,与灾备实例相比,RDS恢复功能产生的克隆实例是按需创建的,从备份数据到克隆实例的数据,需要有较长时间的数据拷贝和日志回放过程。因此RDS备份恢复功能,无法做到恢复到任意时间点的低RTO。

image.png

有没有一种解决方案能够同时解决RTO和RPO问题呢?2021年云数据库RDS和数据库备份DBS产品,针对这一痛点,联合发布了一项的新的备份恢复功能——应急恢复。该功能在原有的RDS备份恢复功能基础上,结合了基于CDM(Copy Data Management)技术的DBS沙箱功能,赋予用户同时使用任意门和时光机的能力,即分钟级快速恢复生成一个任意时间点的新数据库实例。这项功能的入口在“RDS控制台-实例列表-备份恢复-应急恢复”前端标签下可以找到。用户同样也能使用DBS控制台的导入数据源和沙箱实例功能完成相同功能的配置。



使用RDS应急恢复(DBS沙箱)功能

开启应急恢复功能

在RDS控制台,打开实例的管理页面,选择“备份恢复”标签中的“应急恢复”标签。点击“开启/管理DBS应急恢复”


image.png

接下来会跳转到DBS控制台,如果该RDS实例没有开启应急恢复功能,则会显示以下引导页面。其中前2个步骤是自动完成的,需要最多等待1分钟完成,第3步用户可选择付费模式(目前只有容量版可选)和保留天数。点击“确认”后,应急恢复功能就开启成功了。

image.png

之后页面会跳转到DBS控制台的“备份任务配置页面”,如果页面提示沙箱状态为“已开启”,表示已开启成功。注意,第一次开启RDS应急恢复(DBS沙箱)功能后,DBS还会有一段时间的数据准备过程。当准备过程结束,该页面的沙箱实例范围栏会提示可恢复的时间范围。


image.png

创建RDS应急实例

在RDS控制台应急恢复标签下,点击“创建应急实例(DBS沙箱实例)”按钮,页面会跳转到如下DBS控制台的创建沙箱实例页面。在该页面,首先选择恢复时间点(第一次开启后默认可选时间范围,为最近一次RDS备份时间到当前时间)。然后选择创建沙箱的规格、地域、专有网络,以及虚拟交换机(这些选项是为了生成打通到用户专有网络的沙箱实例IP),接下来就可以点击立即恢复。

image.png

接下来页面会跳转到DBS控制台的沙箱实例页面,用户可以看到刚创建的沙箱实例。沙箱实例的初始状态为“创建中”,大约1-2分钟后状态会变为“运行中”,同时会生成沙箱实例的地址(对于RDS MySQL应急实例为用户专有网络IP和3306端口),以及连接到该实例的DMS链接。用户可选择自行连接到沙箱实例,或通过DMS服务白屏化管理实例。


关于创建应急(沙箱)实例,需要注意几点:

  • 沙箱实例“创建中”状态的持续时间,可能还与RDS原实例的日志量有关。最坏情况下,最大可能会增加10分钟的创建时间。
  • 沙箱实例的账号与RDS原实例完全相同,包括客户端白名单。
  • 沙箱实例是可写的,写入的数据不影响原实例,删除沙箱实例后,写入沙箱实例的数据都会丢失。

image.png

应用场景


RDS应急恢复(DBS沙箱)功能,相对原有的RDS备份恢复功能,优势在于能够更快生成一个历史时间点的实例。不过在性能、SLA和平台管理能力方面,应急实例都弱于RDS实例(当然计费比RDS实例也更低)。因此应急实例并不适合替代RDS实例作为用户的生产实例。综合以上的优缺点,我们认为应急实例适合以下几种场景:


  • 开发测试:许多企业的集成测试,依赖真实的在线数据内容和数据量。面向开发者的高效开发测试平台,对测试速度和即时性的要求很高,对于测试数据库,通常要求实例立即可用,并且多个测试用例能够并发且互不干扰的访问。RDS应急实例就非常满足以上需求,用户可以快速创建多个应急(沙箱)实例,甚至可以通过OpenAPI集成到自己的CI/CD系统,搭建面向线上数据的高性能测试服务。
  • 脏数据订正:运维误操作或程序bug,都可能导致用户的生产库实例写入了脏数据,通常这类错误可以被快速发现,但如何订正脏数据,成为了许多企业运维人员最头疼和不想面对的难题。此时运维人员最希望获得的帮助,就是立即有一个状态在误操作或程序bug触发前的数据库实例,作为在线实例的对照,从而通过数据对比来进行脏数据订正。RDS应急恢复例在这一场景就是解决痛点问题的最好方案。
  • 历史分析:企业的历史数据分析通常比较复杂,常用的解决方案是将数据库数据导入到离线数据仓库后分析。但对于简单的历史数据报表分析,例如单实例上的SQL查询能够搞定的简单报表,用户可以用应急(沙箱)实例替代数据仓库,不仅技术难度更低,而且成本也会明显下降。


注意以上这些场景中,应急(沙箱)实例仅仅提供了最核心的一个环节,即快速恢复历史数据,并没有解决所有环节的问题。以脏数据订正场景为例,完整的解决方案需要包括数据的对比、数据轨迹查询、生成并订正数据等多个能力。DBS产品今年将主力打造这类基于应急恢复(沙箱)功能的场景化解决方案。

了解DBS沙箱背后的技术

全量、增量和日志备份,与RTO/RPO的关系

主流的数据库,例如MySQL、SQL Server、Oralce,其物理备份方案都可分为三种类型:全量备份、增量备份、日志备份三种类型。他们各自的原理、开销和对RPO影响各部相同,总结如下。


全量备份

增量备份

日志备份

依赖

全量备份

全量备份

拷贝对象

全部物理文件

较上次备份物理文件差异

数据库日志(例如MySQL binlog)

资源开销

一次性高开销

一次性低开销

持续低开销

对源库影响

产生锁阻塞

产生锁阻塞

无阻塞

对RPO影响

天级

小时/分钟级

秒级

全量备份和增量备份,产生的RPO与备份周期有关。考虑备份开销等因素,用户通常会每天或每周进行一次全量备份,或每小时或数十分钟进行一次增量备份。日志备份由于是持续运行,因此可以直接将RPO降低到秒级。当这三种备份类型组合起来,整体的RPO等于每种备份RPO的最小值。因此我们可以得到第一个结论


如果需要RPO降低到秒级,那么必须包含日志备份(因为依赖关系,也需要全量备份)


我们接下来分析备份类型与RTO的关系。通常备份数据需要经过数据拷贝,才能会恢复给目标实例使用。考虑1T的全量数据,以100MBps的速度拷贝,那么拷贝的时间将长达3个多小时,也就意味着RTO也会大于3小时。CDM/存储虚拟化技术为解决这个问题提供了全新的思路,通过将备份数据转换为快照,可以使得无论多大的备份数据量,都能在分钟或秒级时间内,完成克隆和远程挂载,即将总体RTO降低到了秒级或分钟级


然而日志备份无法转换成快照,因此如果需要同时实现分钟/秒级的RPO和RTO,需要将日志回放的时间也考虑进去。也就是说总体RTO等于基于CDM技术的秒/分钟级RPO与日志回放RPO之和。首先,日志回放的时间与回放的数据量成正比;另一方面,全量和增量备份频率越高,那么快照频率越高,日志回放的数据量越小。第三,因为增量备份的开销远小于全量备份,因此需要尽可能使用增量备份而不是全量备份。


如果需要RTO和RPO同时降低到秒/分钟级,那么必须使用CDM/存储虚拟化技术 如果同时还需要降低源库的开销,那么必须使用高频的增量备份和低频的全量备份相结合


接下来我们会继续解读以下2个关键技术点

  1. 存储虚拟化
  2. 高频增量备份

image.png

存储虚拟化技术


存储虚拟化技术,是解决备份数据到二级数据库的拷贝问题的关键技术,也是业界各种CDM解决方案必不可少的技术点。秒级快照和克隆,是存储虚拟化技术的核心能力。将存储虚拟化技术运用到数据库备份,分为2个阶段:


  • 生成只读快照:对于同一个生产库产生的不同时间的备份集,使用存储虚拟化技术的备份系统,不再将这些备份集区分在不同文件路径存储,而是按时间覆盖备份数据,每当完成新数据的写入覆盖,则创建一个新的快照。产生新的快照并写入数据,不会触发数据拷贝,因此新旧快照之间的重复数据是共享的。
  • 生成可写克隆:当备份系统需要从一个备份集恢复数据时,需要选择一个快照,然后创建基于该快照的克隆。克隆是可写的,对克隆的写入不会影响已创建的快照数据,也不会影响其他克隆的数据。


业界领先的存储系统实现快照和克隆能力,主要的理论基础都是CoW(Copy-on-Write)和RoW(Redirect-on-Write),这两种设计各有利弊,工业界也有不少对这两项技术的改进实现,本文不展开论述。阿里云DBS产品针对不同的场景,综合采用了CoW和RoW两种的存储解决方案。


高频增量备份技术


数据库高频增量备份,主要关注的问题是两个开销:

  • 磁盘IO开销:扫描数据文件差异造成的磁盘IO,为了降低IO开销,数据库通常会引入CBT(Changed Bock Tracking)技术。
  • 实例加锁开销:PIT(point-in-time)拷贝通常需要对数据库实例加一定粒度的锁。


本文主要讨论的是RDS/MySQL实例的快速恢复,因此我们将焦点放到如何实现MySQL的CBT和无锁PIT拷贝。与SQL Server和Oracle这些商业数据库不同,MySQL作为开源数据,在CBT和无锁PIT方面,缺乏操作系统或数据库引擎层面的支持。


在CBT方面,开源MySQL都没有CBT功能,获取innodb的数据文件增量,必须扫描所有文件中的块信息。使用过xtrabackup增量备份的朋友应该都发现了这个问题,虽然一次增量备份产生的数据量远小于全量备份,但备份过程产生的磁盘IO却与全量备份相当。而xtrabackup工具的发布厂商Percona,针对这个问题在它发布的商用版本(Percona Server)中为InnoDB引擎加入了CBT功能,从而可以大幅降低增量扫描IO开销。那么问题来了,对于非Percona版本的MySQL,如何解决这个问题呢?



MySQL 5.X MySQL 8.0 MySQL(Percona) SQL Server Oracle
CBT 不支持
VSS
RMAN
PIT拷贝锁
FTRWL锁 BACKUP锁 同开源MySQL版本 VSS RMAN

DBS提供的备份工具针对开源MySQL/InnoDB不支持CBT功能的现状,推出了基于MySQL redolog的旁路CBT方案。帮助用户物理用哪个MySQL版本,都能够将增量备份的磁盘IO开销控制在很低范围。


在PIT拷贝锁方面,MySQL 5.X版本在拷贝Schema数据过程中会加FTRWL锁,阻塞所有DML和DDL操作。而MySQL 8.0版本在拷贝Schema数据过程中会加Backup锁,相比5.X版本的FTRWL锁粒度变轻了,只会阻塞部分的DDL操作,但仍然对源数据库实例上的业务可能产生影响。DBS提供的备份工具,引入了无锁PIT拷贝的技术,完全避免了数据库锁对业务的影响。


欢迎加入钉钉群一起讨论交流,也欢迎加入DBS团队,简历发送到cuiyun.fcy@alibaba-inc.com


image.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
关系型数据库 MySQL 数据库
阿里云RDS恢复数据到本地上
在2018杭州云栖大会科研云峰会上,阿里云宣布与联科集团达成深度合作。此次合作将依托科研教育行业的多年积累,以及阿里云公共云算力资源的优势,共同推动科研和教育云超算的发展,为广大科研用户提供更便捷的高性能计算服务...
3772 0
|
SQL 运维 安全
阿里云数据库RDS MySQL的数据安全预防与恢复
数据库往往是企业最为核心的数据保护对象,对数据库系统安全的保护,对数据库服务器和数据库中的数据、应用、存储的安全保护对企业来说至关重要,尽管我们用了很多技术手段,也很可能因为管理上的失误导致严重后果,我们需要用技术和管理组合手段,在数据库进行使用之前,就需要对敏感权限进行管控,确定使用环境的安全,并做好全面的预防措施;在数据库的使用过程中,更是需要谨慎操作,假设真的出了问题,还可以进行数据的恢复,以防止数据库系统及其数据遭到泄露、篡改或破坏。
3839 0
阿里云数据库RDS MySQL的数据安全预防与恢复
|
SQL 运维 安全
干货 | 阿里云数据库RDS MySQL数据安全预防与恢复
作者:凌洛,阿里云数据库运维专家
1326 0
干货 | 阿里云数据库RDS MySQL数据安全预防与恢复
|
关系型数据库 MySQL 数据库
RDS for mysql5.7 基础版本使用mysqldump 全量加增量恢复到本地
rds mysql 5.7基础版本无法下载物理备份,在业务不允许中断,并且本地数据库没有公网的情况下,如果要迁移数据到本地可以利用mysqldump 导出的dump 文件然后结合binlog 增量把rds数据迁移到本地。
2157 0
|
关系型数据库 MySQL Linux
RDS FOR MYSQL 各版本利用物理备份进行本地恢复的方法
RDS for mysql利用物理备份文件进行本地恢复笔记,包含5.5,5.6,5.7,8.0版本
5658 0
|
关系型数据库 MySQL Shell
手动恢复RDS MySQL数据库
有时难免需要恢复数据库到之前某个制定时间点(例如由于SQL误操作并且已经commit导致)。在阿里云控制台,RDS有两种恢复方法,一种是覆盖性恢复,可以为理解通过全量备份覆盖当前数据库,只能选取某个全量备份进行操作;一种是通过创建临时库,可以制定近7天内任意时间点。显然,选择后者相对能将影响降到最.
6231 0
|
关系型数据库 MySQL Linux
四步搞定阿里云RDS云数据库恢复到本地mysql数据库
四步搞定阿里云RDS云数据库恢复到本地mysql数据库第1步:下载提取工具和阿里云rds数据库备份文件 1.先去阿里云数据rds后台–>备份恢复–>下载你的数据备份1112.下载阿里云官方提供的rds_backup_extract.sh数据备份文件解压工具,下载地址:点击下载 第2步:找一台linux虚拟机(centos/ubuntu),你去观察你的rds云数据mysql版本是多少,然后在你的linux虚拟机上安装一个相同的版本(因为不同的版本博主没有测过哦)222手头刚好一台centos7虚拟机那就安装mysql5.6呗,不废话4步走起来。
4342 0
|
关系型数据库 数据库 对象存储
资源编排配合实例自定义数据,实现RDS自动创建与恢复
背景不少客户需要批量部署系统他们希望ROS不仅能帮助他们自动部署底层PAAS与IAAS资源还能够省去安装软件链接数据库导入数据库文件的动作。而ROS能完美结合ECS的自定义数据自定义镜像RDS Web API最大化减少人肉工作。
2156 0
|
关系型数据库 MySQL 数据库
RDS for MySQL 备份文件恢复到本地数据库
RDS for MySQL 备份文件恢复到本地数据库
6741 0
|
关系型数据库 PostgreSQL RDS
如何将阿里云RDS PgSQL恢复到本地主机中
阿里云的RDS for PostgreSQL目前提供的备份为物理备份,备份粒度可以自己设置,最频繁的基础备份可以做到一天一次。有了这个备份和归档日志,我们可以做到基于任意时间点(实际上是事务提交或回滚点的粒度)的恢复。在RDS的控制台可以看到: 接下来我将演示一下如何实现以及如何设计一个好的恢复方
6032 0

相关产品

  • 云数据库 RDS MySQL 版
  • 云数据库 RDS