对于运行SaaS、电子商务、企业管理系统和其他在线服务的数据库来说,真正可靠的备份不能只看控制台里有没有出现“Backup completed”。数据库保护至少包含三个问题:备份是否按计划产生,备份能保存多久,以及真正发生数据损坏时能不能在规定时间内恢复。
Google Cloud的Cloud SQL提供自动备份、按需备份以及时间点恢复(Point-in-Time Recovery,PITR)等机制。当前Cloud SQL的备份体系已经不是简单地“每天生成一个完整文件并放进自己创建的Cloud Storage桶”。Cloud SQL标准备份采用增量机制,自动备份可以按照配置的保留数量进行滚动保存;此外,Google Cloud还提供增强型备份和Backup and DR等方案,用于更复杂的企业级备份、保留和灾难恢复需求。
配置Cloud SQL自动备份时,首先进入Google Cloud Console中的Cloud SQL实例,选择目标实例,在Backups或数据保护相关设置中检查自动备份配置。Google Cloud目前允许根据所使用的备份方案配置自动备份保留策略。标准备份的自动备份保留数量可以设置在1到365之间,具体默认值则与Cloud SQL版本和版本方案有关。例如当前文档显示,Enterprise版本默认保留7个自动备份,Enterprise Plus默认保留15个;用户可以根据业务的恢复需求增加保留数量。
这里有一个容易被误解的地方:“保留7天”和“保留7个备份”并不一定在任何情况下完全等价。自动备份按照配置的保留数量滚动清理,因此设计策略时应考虑备份实际产生的频率以及PITR事务日志的保留时间。Google特别提醒,事务日志保留周期需要与自动备份保留策略配合,否则可能出现希望恢复某个时间点,却发现对应日志已经被清理的情况。
对于需要时间点恢复的SaaS系统,还应该配置PITR,而不能只依赖每天一次的自动备份。PITR的意义是,当管理员误删数据、应用程序错误批量更新数据或者某次部署造成数据库内容异常时,可以把数据库恢复到某个具体时间点,而不是只能回到最近一次自动备份。Google Cloud的PITR依赖数据库的事务日志机制;不同Cloud SQL数据库引擎和版本的具体实现有所区别,因此实际配置时应以对应引擎的官方文档为准。
以Cloud SQL for MySQL为例,启用PITR会涉及二进制日志和事务日志保留。当前文档显示,Enterprise版和Enterprise Plus版的日志保留能力不同,因此不能简单写成所有Cloud SQL实例都固定保存7天或者30天。Enterprise Plus的事务日志保留范围可以达到35天,而Enterprise版的范围较短。配置时必须同时考虑自动备份和日志保留周期,因为PITR能够恢复到多远,取决于可用的备份以及相应时间范围内的事务日志。
备份存储位置也不能简单理解为“创建一个Cloud Storage Bucket,然后Cloud SQL把自动备份文件放进去”。Cloud SQL自身具有备份存储机制,可以选择单区域或多区域位置;Google文档目前建议多数场景使用Multi-region,以提高区域故障情况下的恢复能力。如果组织因为合规要求必须把备份放在特定区域,则可以使用自定义备份位置。改变备份存储位置后,已经存在的旧备份不会自动移动到新的位置。
对于需要更强隔离和长期保留的企业环境,还可以考虑Google Cloud Backup and DR的Backup Vault。Backup Vault可以结合备份计划设置备份频率、保留策略和存储位置,并提供不可变备份等能力。这与Cloud SQL实例自身的标准自动备份属于不同层次的保护机制,不能把两者混为一谈。
备份策略确定以后,真正重要的工作其实是恢复测试。一个数据库显示“备份成功”,并不能证明企业具备灾难恢复能力。只有实际从备份创建恢复实例,并验证应用程序能够读取正确数据,才能证明这套方案真正可用。
最安全的恢复演练通常不是直接覆盖生产数据库,而是创建一个独立的测试Cloud SQL实例,然后从指定备份恢复。Google Cloud支持从备份恢复到不同实例,也支持使用PITR创建新的实例。对于PITR,官方文档明确指出,时间点恢复会创建一个新实例,而不是直接把PITR恢复到现有实例。
恢复测试不能只执行一句:
SELECT COUNT(*) FROM users;
真正有价值的验证应该覆盖数据库结构、数据完整性、关键业务记录和应用连接。例如检查数据库数量、表数量、索引、约束、关键租户、订单、付款记录、订阅状态以及最近一批业务数据。对于SaaS系统,还应该确认应用程序使用恢复后的数据库连接后,登录、查询、写入和关键业务流程是否正常。
如果数据库中存在外键关系,还应检查关键表之间的数据一致性。例如订单表中的用户是否仍然存在,订单明细是否能够对应正确的订单,订阅记录是否能够对应租户和付款记录。仅仅确认“数据库能启动”远远不够,因为数据库服务能够启动,并不意味着恢复出来的数据满足业务要求。
PITR测试尤其适合模拟人为误操作。例如测试数据库中先创建一条测试记录,然后记录时间T1;之后模拟错误删除或修改,再选择T1之后、错误发生之前的时间点执行PITR。恢复完成后检查那条记录是否存在,同时确认错误操作之后的数据是否符合预期。这样的测试比单纯查看Cloud Console中的备份列表更有价值,因为它真正验证了“能不能恢复到我需要的时间”。
恢复测试还必须测量RTO和RPO。
RPO(Recovery Point Objective)关注的是最多能够接受多少数据丢失。例如企业要求数据库即使发生灾难,也最多允许丢失15分钟的数据,那么备份策略和PITR日志必须能够满足这个目标。RTO(Recovery Time Objective)则关注从故障发生到业务恢复需要多长时间。
假设某次恢复从19:00开始,19:08创建恢复实例,19:22数据库可以连接,19:31应用完成配置并恢复业务,那么RTO就应该按照企业定义的“业务恢复完成”标准进行计算,而不是简单地把19:08当成恢复完成时间。
恢复测试还应该记录实际成本和资源消耗。恢复一个几十GB的数据库与恢复一个数TB的数据库,时间、网络、存储和计算资源完全不同。企业如果只在测试数据库上验证一个很小的数据集,然后在生产灾难发生时才第一次恢复完整数据库,很可能得到一个与预期完全不同的RTO。
另外需要区分“恢复到同一个实例”和“恢复到新实例”。直接把备份恢复到现有实例属于破坏性操作,因为目标实例当前数据可能被覆盖。Google Cloud官方文档明确提醒,从备份恢复到同一个实例会使目标实例恢复到备份时的状态;目标实例当前数据可能因此被覆盖。生产环境执行这种操作之前必须确认目标、备份时间点和业务影响。
对于PITR,则通常采用创建新实例的方式恢复到指定时间点。恢复完成后,可以先进行数据验证,再根据业务需要切换应用连接。这样可以把恢复过程与生产实例隔离,降低误操作造成二次数据损失的风险。
加密方面,Cloud SQL备份默认采用加密机制,可以使用Google管理的加密密钥,也可以根据具体配置使用客户管理的加密密钥(CMEK)。如果企业使用CMEK,就不能只测试“备份存在”,还应该测试恢复时密钥、IAM权限以及相关Key Management配置是否仍然有效。否则生产环境正常运行时看起来一切正常,真正需要恢复数据库时却可能因为密钥权限问题无法完成操作。
备份权限同样应该纳入灾难恢复测试。不要只让数据库管理员验证一次恢复,然后认为所有人都具备恢复能力。应该明确哪些账号能够查看备份、哪些账号能够创建恢复实例、哪些账号能够修改备份策略,以及哪些账号能够删除备份。对于企业环境,还应避免让备份和生产数据库完全依赖同一个管理边界,否则攻击者如果获得过高权限,可能同时删除生产数据和备份。
数据库备份还应该考虑“实例被删除”的场景。Cloud SQL提供保留实例删除后备份以及最终备份(final backup)等机制,具体保留策略取决于所采用的备份方案和实例配置。这样可以降低误删Cloud SQL实例后所有恢复点同时消失的风险。
对于需要更强灾难恢复能力的企业,还可以考虑把Cloud SQL备份与独立的备份体系结合起来,例如使用Backup and DR的Backup Vault以及跨区域策略。这里的重点不是简单地“复制三份备份”,而是让备份与生产实例之间存在足够的故障隔离。如果生产项目、IAM权限和备份管理权限全部集中在同一个安全边界内,那么单纯增加备份数量并不能解决所有灾难场景。
监控方面,不应该等管理员登录Cloud Console以后才发现自动备份已经连续失败。Google Cloud提供日志和告警机制,可以针对备份状态建立监控。当自动备份失败时,通过日志型告警等方式通知管理员。官方文档也建议针对自动备份失败配置基于日志的告警。
一个比较实用的SaaS数据库恢复验证周期,可以设计成三个层次。日常自动检查负责确认备份任务是否按计划成功;每月进行一次抽样恢复,验证备份确实能够创建可用数据库;季度或半年进行一次完整灾难恢复演练,模拟数据库损坏、误删除或区域级故障,并完整测量RTO、RPO、权限、应用切换和数据完整性。
对于关键业务,还应该在恢复测试结束后删除测试实例,避免长期占用计算和存储资源。恢复出来的测试数据库如果包含真实客户资料,还必须按照企业的数据保护政策处理,不能因为是“测试环境”就忽略访问控制和敏感数据保护。
Cloud SQL备份真正的价值,不是让控制台里出现一个绿色的“Backup successful”,而是当数据库真的出问题时,企业能够知道自己可以恢复到哪里、需要多长时间、会损失多少数据,以及恢复以后业务能否真正继续运行。自动备份解决的是“有没有恢复材料”,PITR解决的是“能不能找到更精确的恢复时间点”,恢复演练解决的则是“这些材料到底能不能用”。三者结合起来,才构成真正意义上的数据库灾难恢复能力。
因此,Cloud SQL的备份设计不应该停留在勾选“Automated backups”这一层面。对于普通业务,可以从合理的自动备份保留周期开始;对于需要降低人为误操作影响的系统,应进一步启用PITR;对于关键SaaS业务,则应把备份位置、事务日志、加密密钥、IAM权限、实例删除保护、恢复实例、RTO、RPO和定期恢复演练全部纳入同一套灾难恢复方案。真正成熟的数据库系统,不是从来不会丢数据,而是在出现最坏情况时,仍然知道数据在哪里,以及怎样把业务重新拉起来。
Cloud SQL 自动备份怎么设置,数据库恢复能力应该如何验证
图片说明:示意图 图片来源:Public Domain(公有领域)
喜欢这篇报道?
使用下面的功能,方便以后继续阅读和分享 MNewsTV
关于文章收藏
收藏不需要注册帐号,收藏信息仅保存在当前浏览器中。
删除收藏请进入「我的收藏」进行管理。
捐助(Paypal): https://www.paypal.me/observeccp 订阅中国观察电报 Telegram : https://t.me/s/ObserveCCP