Cloud SQL 允许您通过以下方式恢复实例:从备份中恢复,或执行时间点恢复 (PITR)。这样一来,您就可以通过以下方式将实例恢复到特定时间段或时间点:将备份恢复到现有实例,或将备份恢复到新实例。如需恢复,您可以使用处于运行状态或已删除的实例的备份。恢复操作会获取源实例的设置、数据库和用户,并将它们设置在您选择的目标实例中。
恢复到新实例时,目标实例可以与来源实例位于不同区域或项目中。目标实例还可以使用与源实例不同的核心数或内存量。
Cloud SQL 始终将目标实例的存储容量设置为已配置磁盘和备份磁盘的大小最大值。备份磁盘是进行备份时的磁盘大小。
在实例上执行恢复操作时,请考虑以下事项:
- 恢复操作会覆盖目标实例上的所有数据。
- 源实例中的标志不会恢复。恢复后,之前在目标实例上设置的所有标志都将保留。
- 在恢复操作过程中,目标实例不可用于连接,现有连接也会断开。
- 如果您使用读取副本恢复到一个实例,则必须删除所有副本,并在恢复操作完成之后重新创建它们。
- 恢复操作会重启实例。
- 从备份恢复后,目标实例的备份配置会设置为默认值。如果源实例具有自定义备份配置或使用增强型备份,则需要在恢复完成后更新备份配置。
使用备份进行恢复
Cloud SQL 允许您使用备份恢复实例。您可以使用有效实例或已删除实例的备份,并使用该备份恢复到新实例或现有实例。您可以使用任何可用的备份来恢复实例。如需详细了解 Cloud SQL 中的备份工作原理,请参阅备份概览。
使用备份恢复实例时,您可以执行以下操作:
- 恢复到新实例
- 恢复到现有实例
- 恢复到其他项目或区域中的实例
如果发生服务中断,您仍然可以检索特定项目中的备份列表,以便从中恢复。
如需使用备份恢复实例,请参阅使用备份恢复实例。
时间点恢复 (PITR)
借助 PITR,您可以将实例恢复到数据库的特定时间点。例如,如果错误导致数据丢失,那么您可以将数据库恢复到错误发生前的状态。与使用备份进行恢复不同,PITR 始终会创建新实例。您无法对现有实例执行 PITR。新实例会继承源实例的设置,类似于创建克隆时的情形。
如果您创建 Cloud SQL 企业 Plus 版实例,则 PITR 默认处于启用状态。您必须手动停用此功能。
如果您在 Google Cloud 控制台中创建 Cloud SQL 企业版实例,则 PITR 在默认情况下处于启用状态。 否则,如果您使用 gcloud CLI、Terraform 或 Cloud SQL Admin API 创建实例,则 PITR 默认处于停用状态。如需为这些实例启用 PITR,您必须手动启用它。
如需了解执行 PITR 的分步说明,请参阅使用时间点恢复 (PITR)。
用于 PITR 的日志存储
PITR 使用预写式日志记录 (WAL) 来归档日志。使用备份恢复现有实例时,这些归档日志会被删除,无法用于执行 PITR。只有在恢复完成后生成的新日志才能用于 PITR。
我们于 2023 年 1 月 9 日发布了在 Cloud Storage 中存储 PITR 事务日志的功能。自从此功能发布以来,以下条件适用:
所有 Cloud SQL 企业 Plus 版实例都会将其用于 PITR 的预写式日志存储在 Cloud Storage 中。只有您在 2024 年 4 月 1 日之前从 Cloud SQL 企业版升级并在 2023 年 1 月 9 日之前启用 PITR 的 Cloud SQL 企业 Plus 版实例才会继续将 PITR 日志存储在磁盘上。
您所创建并在 2023 年 1 月 9 日之前启用了 PITR 的 Cloud SQL 企业版实例会继续将其 PITR 日志存储在磁盘上。
如果您在 2023 年 1 月 9 日之后将在磁盘上存储 PITR 事务日志的 Cloud SQL 企业版实例升级为 Cloud SQL 企业 Plus 版,则升级过程会将用于 PITR 的事务日志的存储位置切换到 Cloud Storage。如需了解详情,请参阅使用就地升级将实例升级到 Cloud SQL 企业 Plus 版。
您所创建并在 2023 年 1 月 9 日之后启用了 PITR 的所有 Cloud SQL 企业版实例都会将用于 PITR 的日志存储在 Cloud Storage 中。
如果实例使用 Cloud Storage 存储预写式日志,则日志存储在主实例所在的区域中。这些日志的存储期限对于 Cloud SQL 企业 Plus 版最长为 35 天,对于 Cloud SQL 企业版最长为 7 天,不会为每个实例产生额外费用。
如需详细了解如何检查用于 PITR 的事务日志的存储位置,请参阅检查实例的事务日志存储位置。
对于仅在磁盘上存储预写式日志的实例,您可以使用 gcloud CLI 或 Cloud SQL Admin API 将用于 PITR 的事务日志的存储位置从磁盘切换到 Cloud Storage。如需了解详情,请参阅将交易日志存储切换到 Cloud Storage。
如需确保实例的日志存储在 Cloud Storage 中(而不是存储在磁盘上),请完成以下操作:
- 检查实例的网络架构。 如果实例在旧网络架构上运行,请将实例升级到新网络架构。
如果磁盘上的日志的大小导致实例出现性能问题,请先停用再重新启用 PITR。此操作可以确保新日志存储在 Cloud Storage 中,而不是存储在磁盘中。
日志保留期限
Cloud SQL 在 Cloud Storage 中保留事务日志的时间会遵循 transactionLogRetentionDays PITR 配置设置中设置的值。此值对于 Cloud SQL 企业 Plus 版可以为 1 到 35 天,对于 Cloud SQL 企业版为 1 到 7 天。如果未设置此参数的值,则 Cloud SQL 企业 Plus 版实例的默认事务日志保留期限为 14 天,而 Cloud SQL 企业版实例的默认事务日志保留期限为 7 天。如需详细了解如何设置事务日志保留天数,请参阅设置事务日志保留。
虽然实例会将用于 PITR 的预写式日志存储在 Cloud Storage 中,但实例也会在磁盘上保留较少的重复预写式日志,以便可以将日志复制到 Cloud Storage。默认情况下,当您创建启用了 PITR 的实例时,该实例会将其 PITR 的预写式日志存储在 Cloud Storage 中。Cloud SQL 还会自动将 expire_logs_days 和 binlog_expire_logs_seconds 标志的值设置为一天。这相当于磁盘上一天的日志。
对于存储在磁盘上、正在切换到 Cloud Storage 或已切换到 Cloud Storage 的 PITR 预写式日志,Cloud SQL 对日志的保留期限是为以下配置之一设置的最小值:
transactionLogRetentionDays备份配置设置expire_logs_days或binlog_expire_logs_seconds标志
如果预写式日志存储在磁盘上、正在切换到 Cloud Storage 或已切换到 Cloud Storage,Cloud SQL 不会为这些标志设置任何值。当日志存储在磁盘上时,修改这些标志的值可能会影响 PITR 恢复的行为以及在磁盘上存储多少天的日志。在将日志存储位置切换到 Cloud Storage 期间,您无法修改标志值。我们不建议您将这两个标志的值配置为 0。如需了解详情,请参阅配置数据库标志。
transactionLogRetentionDays配置设置expire_logs_days数据库标志binlog_expire_logs_seconds数据库标志
例如,为了避免性能问题,可以在几天时间里,每天将标志的值减少一天。这样,Cloud SQL 不会同时清除所有预写式日志。
对于启用了客户管理的加密密钥 (CMEK) 的实例,系统会使用最新版本的 CMEK 加密预写式日志。如需执行恢复操作,必须提供 retained-transaction-log-days 参数中保留的所有天数的最新密钥版本。
PITR 限制
如果实例启用了 PITR,并且磁盘上的事务日志的大小导致实例出现问题,则会受到以下限制:
- 您可以停用再重新启用 PITR,以确保 Cloud SQL 将日志存储在与实例位于同一区域的 Cloud Storage 中。不过,Cloud SQL 会删除所有现有日志,因此您执行 PITR 操作的时间不能早于您重新启用 PITR 的时间。
- 您可以增加实例存储空间大小,但磁盘用量中的事务日志大小的增加可能是临时的。
- 为避免出现意外的存储问题,我们建议启用存储空间自动扩容功能。仅当实例启用了 PITR 且日志存储在磁盘上时,此建议才适用。
如需了解执行 PITR 的分步说明,请参阅 [使用时间点恢复 (PITR)][perform-pitr]。
恢复不可用的实例
您可以使用 PITR 恢复不可用的 Cloud SQL 实例。 PITR 通常提供不超过 5 分钟的恢复点目标 (RPO)。
如果实例不可用,您可以使用 API 获取实例可恢复到的最早和最近恢复时间,并执行到该时间的恢复。如果配置了实例的可用区无法访问,您可以通过为首选可用区提供值来将实例恢复到其他主要可用区或次要可用区。
假设一个 Cloud SQL 实例在美国东部标准时间下午 4 点不可用。如果最近的恢复时间为美国东部时间下午 3:55,则您最多可以将实例恢复到此时间。
使用 PITR 恢复已删除的实例
您可以使用 PITR 在删除 Cloud SQL 实例后恢复该实例。如需使用此功能,您的实例必须在删除之前启用 PITR 和保留备份。启用后,即使您删除了实例,系统也会保留 PITR 日志。
删除实例后,PITR 日志会继续遵循实例处于有效状态时定义的保留设置。在实例删除后,PITR 日志会根据保留设置以滚动方式过期。 滚动式时间段是根据删除前在实例上设置的 PITR 保留期限来定义的。例如,如果您的 Cloud SQL 企业 Plus 版实例的 PITR 保留期限设置为 14 天,则最新的 PITR 日志将在实例删除 14 天后删除。PITR 日志过期后,将无法恢复。
由于在 Cloud SQL 中删除实例后可以重复使用实例名称,因此可以在 Google Cloud 中使用以下字段来识别保留的 PITR 日志:
instance_deletion_timelog_retention_days
借助这些字段,您可以确定 PITR 日志是否属于已删除的实例。
PITR 恢复窗口是指可用于通过 PITR 恢复实例的最早和最晚恢复时间。如需查找已删除实例的最早和最晚恢复时间,请参阅获取最早和最晚恢复时间。
如需在实例删除后使用 PITR 恢复实例,请参阅对已删除的实例执行 PITR。
将备份恢复到新实例的要求
将实例恢复到新实例时,请注意以下要求:
目标实例的数据库版本是否必须与用于获取备份的实例相同。
目标实例的存储容量必须至少与所备份实例的容量一样大。目标实例所占用的存储量无关紧要。您可以在控制台的 Cloud SQL 实例页面查看实例的存储容量。
目标实例必须处于
RUNNABLE状态。
恢复速率限制
每个项目每个区域每个实例每 30 分钟最多允许执行三项恢复操作。如果恢复操作失败,则不会计入此配额。如果达到限制,操作将失败并显示错误消息,指示何时可以再次运行该操作。
Cloud SQL 使用存储桶中的令牌来确定任一时段内可以执行多少次恢复操作。对于每个备份,每个目标项目和目标区域都有一个存储桶。来自同一项目的目标实例共用一个存储桶(如果它们位于同一区域)。每个存储桶中最多有三个令牌可用于恢复操作。每隔 10 分钟,系统就会向存储桶添加一个新令牌。如果存储桶已满,则令牌会溢出。
每次您发出恢复操作时,系统都会从存储桶授予令牌。如果操作成功,则系统会从存储桶中移除令牌。如果失败,令牌会返回到存储桶。下图展示了其工作原理:

例如,在下图中,Backup1、Backup2 和 Backup3 是来自同一来源实例的备份。

- 每个备份(Backup1、Backup2 和 Backup3)都有自己的用于恢复操作的令牌存储桶,这些令牌存储桶针对的是区域 A 的项目 1 中的不同实例(Bucket11A、Bucket21A 和 Bucket31A)。由于每个备份都有自己的存储桶,因此您可以每 30 分钟将每个备份恢复到同一实例三次。
- 每个备份都有一个针对不同项目和不同区域的存储桶。例如,如果一个区域中有五个项目,则该区域中的备份有五个存储桶,每个项目一个。在上图中,我们在区域 A 中有两个项目:项目 1 和项目 n。
- Backup1 在区域 A 中有两个用于恢复操作的令牌存储桶。一个存储桶针对项目 1 (Bucket11A),另一个存储桶针对项目 n (Bucket1nA)。
- 同样,Backup3 在区域 A 中有两个用于恢复操作的存储桶。一个针对项目 1 (Bucket31A),另一个针对项目 n (Bucket3nA)。
- Backup3 在区域 B 中有一个针对 Project1 的存储桶,因为同一目标项目和同一目标区域中的所有实例都共用一个存储桶。