备份概览

本页面介绍了 Cloud SQL 实例备份的工作原理。

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

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

备份的用途

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

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

备份费用

默认情况下,除了所有按需备份之外,Cloud SQL 还为每个实例保留七个自动备份。您可以配置要保留的自动备份的数量。与其他类型的实例相比,我们的备份存储费用更低。

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

备份与导出

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

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

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

关于备份大小

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

备份类型

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

按需备份

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

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

自动备份

自动备份使用一个 4 小时的备份时段。备份会在该时段内启动。尽量将备份安排在实例活动最少的时候。

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

备份的存储位置

备份位置包括:

默认备份位置

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

自定义备份位置

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

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

请参阅为备份设置自定义位置查看备份的位置

自动备份和事务日志保留

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

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

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

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

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

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

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

请参阅设置自动备份保留

请参阅设置事务日志保留

能否导出备份?

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

关于特殊备份用户

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

备份对实例操作的影响

对于 MySQL 实例,备份不使用 FLUSH TABLES WITH READ LOCK 标志。这意味着,备份操作不会影响写入和其他操作。

通常,备份会在几秒钟内完成,但如果自上次备份以来有大量数据写入,则备份会需要较长时间才能完成。

如果在尝试备份时存在待处理的操作,则 Cloud SQL 通常会在该时段内进行多次尝试以完成备份。导入、导出、更新(如实例元数据更改)和实例重启等长时间运行的 Cloud SQL 实例操作会阻止创建备份。

在长时间运行的操作(如加载数据)期间,您可以暂时停用自动备份功能。

问题排查

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

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

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

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

  • cloudsql.googlapis.com/mysql-general.log
  • cloudsql.googleapis.com/mysql.err
  • 如果启用了 Cloud Audit Logs,并且您具有查看这些日志的必要权限,那么 cloudaudit.googleapis.com/activity 也可以使用。
删除实例后,您无法执行备份。 Cloud SQL 实例完全清除的宽限期为四天,读取副本除外,后者会立即完全清除。在此期间,客户服务可以重新创建实例。清除实例后,将无法恢复数据。

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

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

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

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

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

您想要将自动备份的天数从 7 天增加到 30 天,或更长时间。 系统仅保留 7 个备份。由于保留备份的费用和空间占用,备份会定期进行清除。遗憾的是,这也意味着当前可见的备份是所有可以用于恢复的自动备份。

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

备份失败,您会看到 Unknown error 消息。 备份操作可能已超时。

有两个标志会影响备份创建:checkpoint_timeoutcheckpoint_completion_target。在备份开始时,slow 检查点会运行并将 checkpoint_completion_target 乘以 checkpoint_timeout

例如 900 sec * 0.9 sec = 810 sec = 13.5 min

因此会发生超时。在这种情况下,减小 checkpoint_completion_target 的值可以解决该问题。

自动备份失败,但您未收到电子邮件通知。 备份失败时不支持通知。

如果自动备份失败,Cloud SQL 实例的 Details 页面中将显示 Operation error 消息。

您可以通过 REST APIgcloud 命令查找备份的状态。例如,首先列出实例的备份,然后按 ID 描述特定备份:


gcloud sql backups list \
--project=PROJECT_ID \
--instance=INSTANCE_ID
   

gcloud sql backups describe BACKUP-ID \
--instance=INSTANCE_ID
    

后续步骤