Cloud SQL 备份简介

本页面介绍了 Cloud SQL 实例备份的工作原理。您可以对主实例执行备份。

如需查看有关安排备份或创建按需备份的分步说明,请参阅创建和管理按需备份与自动备份

如需简要了解如何将备份将数据恢复到实例,请参阅实例恢复概览

备份的用途

备份可帮助您将丢失的数据恢复到 Cloud SQL 实例。 此外,如果某个实例出现问题,则可以通过使用备份覆盖该实例,将其恢复到先前状态。为包含必要数据的任何实例启用自动备份。备份可防止数据丢失或损坏。

某些操作(如克隆和副本创建操作)也需要启用自动备份以及事务日志记录功能。

备份费用

默认情况下,除了按需备份之外,Cloud SQL 还为每个 Cloud SQL 企业版实例保留 7 个自动备份,并为每个 Cloud SQL 企业 Plus 版实例保留 15 个自动备份。您可以配置要保留的自动备份数量(从 1 个到 365 个)。与其他类型的实例相比,我们的备份存储费用更低。

如果您停止或删除实例,Cloud SQL 不会获取实例备份。如果您删除实例,则数据将仅保留 4 天。如需恢复实例及其数据,请在 4 天内与 Google Cloud 支持团队联系,并提供所有必要的实例信息。

如需了解详情,请参阅价格页面

备份与导出

备份由 Cloud SQL 根据保留政策进行管理,并与 Cloud SQL 实例分开存储。Cloud SQL 备份与导出的数据不同,后者会上传到 Cloud Storage,您可以在其中管理其生命周期。备份包含整个数据库。对于导出操作,您可以选择特定的内容。

备份和恢复操作不能用于将数据库升级到更高版本。您只能将备份恢复到具有相同数据库版本的实例。

如需升级到更高版本,请考虑使用 Database Migration Service导出数据库,然后导入到新的 Cloud SQL 实例。

关于备份大小

Cloud SQL 备份是增量备份。这些备份仅包含自上次备份以来发生了更改的数据。最早备份的大小与数据库大小相似,但后续备份的大小取决于数据的更改速率。删除最早的备份后,下一个最早备份的大小将会增加,因此仍然存在完整备份。

备份类型

Cloud SQL 执行两种类型的备份:

按需备份

您可以随时创建备份。如果您要对数据库执行有风险的操作,或者您需要备份但不想等到备份时段再执行,则自动备份非常有用。您可以为任何实例创建按需备份,无论实例是否启用了自动备份。

按需备份不像自动备份那样自动删除。 此类备份会一直留存到您删除它们或其实例被删除为止。由于按需备份不会自动删除,因此可能会对您的结算费用产生长期影响。

自动备份

自动备份每天进行一次,备份时段不超过 4 小时。备份会在该时段内启动。尽量将备份安排在实例活动最少的时候。

我们建议您不要删除任何自动备份,因为支持时间点恢复需要它们。

在备份时段内,系统每天在实例运行时进行一次自动备份。实例停止后,系统会再执行一次自动备份,以保护实例停止前的所有更改。默认情况下,最多保留七个最新备份。 您可以配置要保留的自动备份数量(从 1 个到 365 个)。 您可以通过默认设置更改备份和事务日志保留值。了解详情

备份的存储位置

备份位置包括:

默认备份位置

如果未指定存储位置,则备份将存储地理位置最靠近 Cloud SQL 实例位置的多区域中。例如,如果 Cloud SQL 实例位于 us-central1,则默认情况下,备份存储在 us 多区域中。但是,像 australia-southeast1 这样的默认位置不在多区域范围之内。最接近的多区域是 asia

自定义备份位置

Cloud SQL 可让您为备份数据选择自定义位置。如果您的组织需要遵守的数据驻留法规要求您将备份保留在特定地理边界内,那么这项功能就非常有用。如果您的组织有此类要求,它可能会使用资源位置限制组织政策。启用此政策后,如果您尝试使用的地理位置不符合此政策,您会在备份页面上看到提醒。如果您看到此提醒,则需要将备份位置更改为该政策允许的位置。

为备份选择自定义位置时,请考虑以下事项:

  • 费用:实例中的一个集群可能位于比其他集群费用更低的区域。
  • 邻近应用服务器:您可能需要将备份存储到尽可能靠近传送应用的位置。
  • 存储空间利用率:随着备份不断增大,您需要有足够的存储空间来存储备份。根据工作负载,您可能有不同大小或不同磁盘用量的集群。这可能会影响您对集群的选择。

如需查看有效地区值的完整列表,请参阅实例位置。如需查看多地区值的完整列表,请参阅多地区位置

如需详细了解如何设置备份位置以及查看实例备份位置,请参阅为备份设置自定义位置查看备份位置

自动备份和事务日志保留

自动备份用于restore Cloud SQL 实例。自动备份和事务日志的组合用于执行时间点恢复

通过配置保留期,自动备份最多可以保留一年,而按需备份会持续到您删除备份或实例被删除为止。

虽然事务日志以天为单位计数,但不能保证自动备份会在日期边界进行。这些保留设置使用不同的单位。自动备份保留是一个计数,可以设置为 1 到 365 个备份。

事务日志保留以天为单位。对于 Cloud SQL 企业 Plus 版实例,范围介于 1 到 35 天之间,默认值为 14 天。对于 Cloud SQL 企业版实例,范围介于 1 到 7 天之间,默认值为 7 天。对于 Cloud SQL 企业 Plus 版和 Cloud SQL 企业版实例,事务日志保留设置必须小于备份保留设置。

下限值可用于测试实例,因为日志和备份的删除速度更快。对于事务日志,磁盘大小不会因下限值而增大。为自动备份保留使用较高的值可让您从更早之前的时间恢复。

日志每天完全清除一次,不会持续清除。当日志保留天数与备份数量相同时,可能导致日志保留不足。例如,如果日志保留天数设置为 7 天并且备份保留数量设置为七次备份,则意味着将保留六到七天的日志。

我们建议将备份数量设置为日志保留天数至少加 1,以保证日志至少保留指定的最少天数。

对数据库的写入活动较多可能会生成大量事务日志,这可能会占用大量磁盘空间,并导致已启用存储空间自动扩容功能的实例的磁盘容量增长。建议调整实例存储大小以考虑事务日志保留量。

请参阅设置自动备份保留

请参阅设置事务日志保留

能否导出备份?

不可以,您无法导出备份。只能导出实例数据。请参阅从 Cloud SQL 导出数据

关于特殊备份用户

Cloud SQL 会为每个实例创建一个特殊数据库用户 cloudsqladmin,并为其生成唯一的实例专用密码。Cloud SQL 会以 cloudsqladmin 用户身份登录来执行自动备份。

备份对实例操作的影响

写入和其他操作不受备份操作的影响。

备份速率限制

Cloud SQL 限制数据磁盘上的备份操作的速率。每个项目每个实例每 50 分钟最多执行五项备份操作。如果备份操作失败,则不计入此配额。如果达到限制,操作将失败并显示错误消息,指示何时可以重试。

我们来看看 Cloud SQL 如何对备份执行速率限制。

Cloud SQL 使用存储桶中的令牌来确定任一时段内可以执行多少次备份操作。每个实例都有一个存储桶。存储桶中最多有五个令牌可用于备份操作。每隔 10 分钟,系统就会向存储桶添加一个新令牌。如果存储桶已满,则令牌会溢出。

每次您发出备份操作时,系统都会从存储桶授予令牌。如果操作成功,则系统会从存储桶中移除令牌。如果失败,令牌会返回到存储桶。下图展示了其工作原理:

令牌的工作原理

备份和数据完整性检查

Cloud SQL 会自动在后台执行数据库完整性检查,以识别任何潜在的数据完整性问题。这些检查作为离线流程完成,会恢复客户启动的备份或恢复备份的采样。

恢复备份

实例被删除后,Cloud SQL 会删除其所有备份。为防止意外删除实例,Cloud SQL 会将实例的备份保留四天。如需恢复已删除的实例,请在四天内与 Google Cloud Customer Care 联系。

Cloud SQL 会为每个活跃实例至少保留最后一项良好的每日备份。因此,如果没有良好的备份可用,您可以通过联系 Google Cloud Customer Care,使用每日备份来恢复实例。

未记录的表

在备份还原期间,系统会自动擦除未记录的表。

问题排查

问题 问题排查
您无法查看当前操作的状态。 Google Cloud 控制台仅在操作完成后报告成功或失败,而不会显示警告或其他更新。

运行 gcloud sql operations list 命令以列出给定 Cloud SQL 实例的所有操作。

您想要了解发起按需备份操作的人员。 界面未显示开始操作的用户。

查看日志并按文本进行过滤以查找用户。您可能需要对私密信息使用审核日志。相关日志文件包括:

  • cloudsql.googleapis.com/postgres.log
  • 如果启用了 Cloud Audit Logs,并且您具有查看这些日志的必要权限,那么 cloudaudit.googleapis.com/activity 也可以使用。
实例被删除后,您将无法再备份该实例。

完全清除实例后,将无法恢复数据。但是,如果恢复实例,则其备份也会被恢复。如需详细了解如何恢复已删除的实例,请参阅恢复备份

如果您已完成导出操作,请创建新实例,然后执行导入操作以重新创建数据库。导出数据将写入 Cloud Storage,导入数据从此处进行读取。

自动备份停滞了数小时,无法取消。 备份可能需要很长时间,具体取决于数据库大小。

如果您确实需要取消该操作,可以要求客户服务对实例执行 force restart

如果 SQL 转储文件中引用的一个或多个用户不存在,恢复操作可能会失败。 在恢复 SQL 转储之前,拥有对象或获得了对转储数据库中的对象权限的所有数据库用户都必须存在于目标数据库中。否则,恢复操作将无法使用原始所有权或权限重新创建对象。

在恢复 SQL 转储之前,先创建数据库用户

您想要将自动备份的天数从 7 天增加到 30 天,或更长时间。 您可以配置要保留的自动备份的数量(从 1 到 365)。系统会根据配置的保留期限值定期删除自动备份。遗憾的是,这也意味着当前可见的备份是所有可以用于恢复的自动备份。

如需无限期地保留备份,您可以创建按需备份,因为它们的删除方式与自动备份不同。按需备份会无限期保留。也就是说,按需备份会一直保留,直到被删除或它们所属的实例被删除为止。由于该类型的备份不会自动删除,因此可能会影响结算。

自动备份失败,但您未收到电子邮件通知。 如需让 Cloud SQL 通知您备份的状态,请配置基于日志的提醒
实例反复失败,因为它在故障状态和备份恢复状态之间循环。恢复后尝试连接并使用数据库失败。
  • 打开的连接可能过多。造成连接过多的原因可能是由于在连接过程中发生错误,而没有用于清除无效连接的 autovacuum 设置。
  • 如果任何自定义代码使用的重试逻辑不会在几次失败后停止,则可能会发生循环。
  • 流量可能过多。使用连接池和其他最佳连接做法

可以尝试的操作:

  1. 验证数据库是否是autovacuum 设置的
  2. 检查是否在自定义代码中设置了任何连接重试逻辑。
  3. 关停流量,直到数据库恢复,然后缓慢恢复流量。
您发现执行备份/恢复操作时丢失数据。 表创建为未记录。例如:

CREATE UNLOGGED TABLE ...

从备份中还原时不包含这些表:

  • 在高可用性实例上,未记录的表的内容无法进行故障切换。
  • 未记录的表在 postgres 崩溃后无法继续存在。
  • 未记录的表不会被复制到读取副本。
  • 在备份还原期间,系统会自动擦除未记录的表。

解决方法是,如果您想要通过备份恢复这些表,请避免使用未记录的表。如果您要从包含未记录的表的数据库进行还原,则可以将数据库转储到一个文件,并在将转储文件修改为 ALTER TABLE 后重新加载数据到这些表格上的 SET LOGGED

后续步骤