当今世界是一个充满着数据的互联网世界,生活的方方面面都在不断产生着数据,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。对于企业而言,数据更是重要的生产资料,关键数据的丢失可能会给企业带来致命一击。一旦客户资料、技术文件、财务账目等客户、交易、生产数据发生丢失、损坏,企业就有可能陷入困境。
云时代中,云数据库都有着高可靠、高可用的架构,保证用户的数据不会丢失。如京东云云数据库RDS就基于全球广受欢迎的MySQL、Percona、 MariaDB、SQL Server、PostgreSQL数据库引擎,提供稳定可靠的云数据库服务。
相比传统数据库,云数据库RDS易于部署、方便管理和扩展,默认支持主从高可用架构,提供数据备份恢复、变更配置、监控报警等整套数据库解决方案,彻底解决数据库使用和运维的烦恼。云数据库RDS通常会提供了地域级高可用切换、多AZ部署,但是当出现地域级故障、人为误删除等各种不同场景时,仍然需要根据业务级别设计数据恢复预案,全方位保证业务的连续性和可靠性。
在数据灾备解决方案中,RPO和RTO是衡量灾备方案的两个重要指标:
RPO(Recovery Point Objective)即数据恢复点目标,主要指的是业务系统所能容忍的数据丢失量;
RTO(Recovery Time Objective)即恢复时间目标,主要指的是所能容忍的业务停止服务的最长时间,也就是从灾难发生到业务系统恢复服务功能所需要的最短时间周期。
从下图中我们可以看到云数据库RDS各个灾备相关功能对RTO和RPO的支持:
功能点RTORPO地域范围自动备份高中等相同地域手动备份中等高相同地域跨地域备份同步中等中等不同地域数据库备份DBS高高不同地域
京东云数据库备份DBS
针对灾备场景,京东云推出了独立的集中式数据库备份服务——数据库备份DBS。
数据库DBS可以实时备份数据到云端或异地机房,为数据库提供持续性、低成本的数据保护,帮助企业快速构建数据库备份中心,满足业务和监管备份合规性要求。同时,京东云云数据库RDS也提供了自动备份、手动备份、跨地域备份同步的功能,为用户系统提供完善、高性价比的灾备解决方案。
目前,数据库DBS提供整库备份和恢复能力,为防止删库跑路、机房容灾等灾备场景提供解决方案。
数据库备份DBS将备份和恢复的目标库扩展到RDS实例之外的其他自建数据库,并且可以快速帮助用户对自建数据库、云RDS实例进行异地备份,通过专线或公网将数据库实时备份到数据库备份DBS上。
数据库备份DBS优势特点
数据库备份DBS具有如下优势:
(1)简单易用
使用数据库备份 DBS 进行数据库备份,只需简单几步即可创建备份任务,开始数据备份;
(2)功能丰富
提供逻辑备份、增量备份等备份选择;
(3)低成本
提供冷备容灾备份方案,降低业务和存储成本;
(4)性能可靠
根据备份量和备份压力,自动扩展,适应高并发、大流量的备份场景;
(5)安全可信
支持备份可用性和完整性校验,保证备份可用性。
数据库备份RDS备份方式
京东云云数据库提供了三种不同的备份方式:自动备份、手动备份、跨地域备份。
一、自动备份
自动备份包括全量物理备份和binlog增量备份。
云数据RDS的自动备份默认是开启的,RDS服务将根据备份策略定期触发对RDS实例的备份,您可以在备份策略窗口中选择您需要进行自动备份的时间段,系统自动会在这个时间段内的任意时间点开始执行备份操作。
当RDS实例中的数据量随着业务量的增长达到一定的数量级时,在指定时间周期内备份任务可能无法完成,备份任务在下一个周期内会继续进行,保证RDS实例能正常完成一个全量备份。
配置自动备份后, 你不再需要每天执行手动备份,RDS服务会保证备份按时进行,并将备份文件完整地保存到指定的位置,避免因故障或异常操作导致你的重要数据丢失。
每次实例创建、删除、扩容等关键流程,都会触发自动备份,包括全量备份、binlog备份,甚至数据库配置文件、错误日志都会备份,全方面保证用户数据安全。
云数据库RDS每5min进行一次Binlog备份。Binlog配置是row格式,image = full,记录所有数据操作。综上,RDS实例能够为业务提供分钟级RPO,RTO则根据实际数据量确定。
二、手动备份
你可以根据业务需要随时触发一个手动备份,手动备份完成后,备份文件不会被自动清除,需要手动执行删除备份的操作。当RDS实例被删除的时候,备份文件也会自动被删除。
三、跨地域备份
云数据库RDS实例支持跨可用区高可用部署,在单个 AZ(可用区)无法正常提供服务的情况下,仍然可以保持云数据库 RDS 实例正常提供服务。但是如果云数据库RDS实例所在的Region(地域)无法正常提供服务,那么依赖于这个云数据库RDS实例的业务也就瘫痪了。跨地域备份同步服务,为云数据库RDS提供更高可用性,实现跨地域的服务容灾。
跨地域备份同步服务,通过将云数据库RDS实例的备份文件同步到不同 Region(地域),从而确保云数据库RDS实例在原Region(地域)不可用的时候,可以迅速在同步了云数据库RDS备份的地域新建一个新的云数据库RDS实例。
云数据库RDS每十分钟发起一次跨地域备份任务,由于备份任务是一个异步操作,并且数据传输也是一个耗时的过程,虽然不同地域间基于专线进行数据同步,同步速度远超普通公网带宽,但跨地域备份任务的同步时延与数据量息息相关,因此实际延迟时间根据备份文件的传输时间确定。
同时,数据库备份RDS备份在设计时做了很多优化:
RDS实例采用物理热备份的方式,在备份过程中,不影响用户访问数据库DML操作;
RDS实例的备份在从库上进行,不会对主库有任何的影响;
RDS实例备份,采用流式的方式上传到OSS中,备份数据不会占用实例的存储空间,按需并发高速上传数据,减少备份时间。1T数据可以在2-3小时完成备份;
RDS实例备份支持压缩、加密。压缩比可以到3:1,并且保护用户备份数据的安全;
RDS实例的备份文件在对象存储中保存,对象存储提供超高的数据可靠性,保证备份文件的安全。并且对象存储的bucket由RDS服务托管,您无法通过控制台查看对象存储的bucket,但RDS服务提供了备份文件的下载链接,您可以直接将备份文件下载到本地。
数据恢复
在使用云数据库实例的过程中,如果软件异常或者某种突发情况导致数据库中出现脏数据,可以根据备份全量恢复或新建一个数据库实例,也可以选择恢复数据库中的一个或多个库表。
另外,如果你的业务需要进行异地容灾,可以在跨地域备份里选择一个备份文件,在指定地域恢复一个新的数据库实例。RDS采用流式的方式将备份文件从OSS并发下载到本地进行数据恢复,同时支持并发加、解密的策略,进一步降低恢复时间。
目前RDS提供4种恢复策略:根据备份本地覆盖恢复、根本备份创建新实例、按时间点创建新实例和根据时间点恢复本地实例。其中按时间点创建和恢复策略时间可以精确到秒级,根据时间点恢复可以对本地数据做单库单表恢复,并且能够保留本地原库表,通过对比不同时间的同一份数据,获取数据库的具体操作,方便用户对恢复前后的数据做进一步的数据审计。
写在最后
本文围绕云数据库RDS对数据库的灾备方案进行介绍,除了RDS实例以外,完整的灾备方案还应该包含主机、LB等部署您应用程序的所有其他资源。灾备预案需要在实际生产环境中反复测试和验证,完整的灾备方案可以让您及时发现潜在问题,更加从容地应对生产环境中的各种意外和风险及时发现潜在的问题。
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为