本页面介绍了如何使用时间点恢复 (PITR) 来恢复 Cloud SQL 主实例。
如需详细了解 PITR, 请参阅时间点恢复 (PITR)。
用于 PITR 的日志存储
我们于 2024 年 5 月 31 日发布了在 Cloud Storage 中存储 PITR 事务日志的功能。自从此功能发布以来,以下条件适用:在此日期之前创建的启用了 PITR 的 Cloud SQL 实例之前会将 PITR 事务日志存储在磁盘上。自那时起,大多数此类实例的 PITR 事务日志已迁移到 Cloud Storage。如需验证特定实例的日志位置,请参阅检查用于 PITR 的事务日志的存储位置。
在此日期当天或之后创建且启用了 PITR 的所有 Cloud SQL 实例都会将这些日志存储在 Cloud Storage 中。
交易日志会定期更新,并且会占用一定的存储空间。Cloud SQL 会自动删除事务日志及其关联的自动备份。此操作在满足为 transactionLogRetentionDays
参数设置的值之后发生。如需详细了解此参数,请参阅日志和磁盘用量。
对于仅在磁盘上存储事务日志的实例,您可以先停用 PITR,然后再重新启用 PITR,从而将日志配置为存储在 Cloud Storage 中。您无法将日志从 Cloud Storage 移回磁盘。
如需确保实例的日志存储在 Cloud Storage 中(而不是存储在磁盘上),请完成以下操作:
- 检查实例是否将日志存储在磁盘或 Cloud Storage 上。
- 检查实例的网络架构。如果实例在旧网络架构上运行,请将实例升级到新网络架构。
- 如果磁盘上的日志的大小导致实例出现性能问题,请先停用 PITR,然后再重新启用。
日志和磁盘使用量
对于在 Cloud Storage 中存储事务日志的实例,日志存储在主实例所在的区域中。此日志存储(对于 PITR 的最大时长,Cloud SQL 企业 Plus 版最多为 35 天,Cloud SQL 企业版最多为 7 天)不会为每个实例产生额外费用。
Cloud SQL 会定期生成事务日志,这些日志会占用存储空间。Cloud SQL 会自动删除事务日志及其关联的自动备份。此操作在满足为 transactionLogRetentionDays
参数设置的值之后发生。此参数指定 Cloud SQL 保留事务日志的天数。对于 Cloud SQL 企业 Plus 版,您可以将保留事务日志的天数设置为 1 到 35 天;对于 Cloud SQL 企业版,您可以将此值设置为 1 到 7。
如果未设置此参数的值,则 Cloud SQL 企业 Plus 版实例的默认事务日志保留期限为 14 天,而 Cloud SQL 企业版实例的默认事务日志保留期限为 7 天。如需详细了解如何应用此设置,请参阅设置事务日志保留。
如需了解事务日志使用了多少磁盘,请检查实例的 bytes_used_by_data_type
指标。该数据类型的值会返回磁盘上事务日志的大小。对于在磁盘上存储用于 PITR 的事务日志的实例,Cloud SQL 每天都会从磁盘中完全清除数据,以满足 transactionLogRetentionDays
PITR 设置。如需了解详情,请参阅自动备份保留。
限制
以下限制与实例启用了 PITR 且磁盘上事务日志的大小导致实例出现问题有关:
- 您可以停用然后重新启用 PITR,以确保 Cloud SQL 将日志存储在与实例位于同一区域的 Cloud Storage 中。但是,Cloud SQL 会删除所有现有日志,因此您执行 PITR 操作的时间不能早于您重新启用 PITR 的时间。
- 您可以增加实例存储空间大小,但磁盘用量中的事务日志大小的增加可能是临时的。
- 为避免意外的存储问题,我们建议启用存储空间自动扩容功能。仅当实例启用了 PITR 且日志存储在磁盘上时,此建议才适用。
- 如果要删除日志并恢复存储空间,您可以停用 PITR,而不重新启用它。但是,减小所占用的存储空间不会缩小为实例预配的磁盘大小。
日志每天完全清除一次,不会持续清除。将日志保留设置为两天意味着系统会保留至少两天、最多三天的日志。我们建议将备份数量设置为日志保留天数加 1。
例如,如果您为
transactionLogRetentionDays
参数的值指定7
,则对于backupRetentionSettings
参数,请将retainedBackups
的数量设置为8
。
如需详细了解 PITR,请参阅时间点恢复 (PITR)。
用于 PITR 的数据库恢复模型
当您在实例上启用 PITR 时,Cloud SQL 会自动将现有数据库和后续数据库的恢复模型设置为完整恢复模型。
如需详细了解 SQL Server 恢复模型,请参阅 Microsoft 文档。
启用 PITR
当您在 Google Cloud 控制台中创建新实例时,系统会自动启用自动备份设置。以下过程会在现有主实例上启用 PITR。
控制台
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 打开要启用 PITR 的实例对应的“更多操作”菜单 ,然后点击修改。
- 在自定义实例下,展开数据保护部分。
- 选中启用时间点恢复复选框。
- 在日志保留天数字段中,输入保留日志的天数(对于 Cloud SQL 企业 Plus 版为 1-35,对于 Cloud SQL 企业版为 1-7)。
- 点击保存。
gcloud
- 显示实例概览:
gcloud sql instances describe INSTANCE_NAME
- 如果您在
backupConfiguration
部分中看到enabled: false
,请启用计划备份:gcloud sql instances patch INSTANCE_NAME \ --backup-start-time=HH:MM
使用 UTC±00 时区的 24 小时制时间指定
backup-start-time
参数。 - 启用 PITR:
gcloud sql instances patch INSTANCE_NAME \ --enable-point-in-time-recovery
如果您要在主实例上启用 PITR,还可以通过添加以下参数来配置要保留事务日志的天数:
--retained-transaction-log-days=RETAINED_TRANSACTION_LOG_DAYS
- 确认更改:
gcloud sql instances describe INSTANCE_NAME
在
backupConfiguration
部分中,如果更改成功,您会看到pointInTimeRecoveryEnabled: true
。
REST v1
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
- INSTANCE_NAME:您为实现高可用性而配置的主实例或读取副本实例的名称
- START_TIME:时间(以小时和分钟为单位)
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
请求 JSON 正文:
{ "settings": { "backupConfiguration": { "startTime": "START_TIME", "enabled": true, "pointInTimeRecoveryEnabled": true } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
REST v1beta4
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
- INSTANCE_NAME:您为实现高可用性而配置的主实例或读取副本实例的名称
- START_TIME:时间(以小时和分钟为单位)
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME
请求 JSON 正文:
{ "settings": { "backupConfiguration": { "startTime": "START_TIME", "enabled": true, "pointInTimeRecoveryEnabled": true } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
执行 PITR
控制台
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 打开要恢复的实例对应的“更多操作”菜单 ,然后点击创建克隆。
- (可选)在创建克隆页面上,更新新克隆的 ID。
- 选择从较早的时间点克隆。
- 输入 PITR 时间。
- 选择所有数据库,或指定数据库名称。
如果您指定数据库名称,则只能选择一个名称。默认情况下,PITR 会用于所有数据库。 - 点击创建克隆。
gcloud
使用 PITR 创建克隆。
替换以下内容:
- SOURCE_INSTANCE_NAME - 您要从中恢复的实例的名称。
- NEW_INSTANCE_NAME - 克隆的名称。
- TIMESTAMP - 源实例的 UTC 时区(采用 RFC 3339 格式)。例如 2012-11-15T16:19:00.094Z。
gcloud sql instances clone SOURCE_INSTANCE_NAME \ NEW_INSTANCE_NAME \ --point-in-time 'TIMESTAMP'
REST v1
在使用任何请求数据之前,请先进行以下替换:
- project-id:项目 ID
- target-instance-id:目标实例 ID
- source-instance-id:源实例 ID
- restore-timestamp:在恢复之前所处的时间点
在 JSON 请求中,您可以选择按如下所示最多指定一个特定数据库名称:"databaseNames": "my-database"
HTTP 方法和网址:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/source-instance-id/clone
请求 JSON 正文:
{ "cloneContext": { "kind": "sql#cloneContext", "destinationInstanceName": "target-instance-id", "pointInTime": "restore-timestamp" } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
REST v1beta4
在使用任何请求数据之前,请先进行以下替换:
- project-id:项目 ID
- target-instance-id:目标实例 ID
- source-instance-id:源实例 ID
- restore-timestamp:在恢复之前所处的时间点
在 JSON 请求中,您可以选择按如下所示最多指定一个特定数据库名称:"databaseNames": "my-database"
HTTP 方法和网址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/source-instance-id/clone
请求 JSON 正文:
{ "cloneContext": { "kind": "sql#cloneContext", "destinationInstanceName": "target-instance-id", "pointInTime": "restore-timestamp" } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
停用 PITR
控制台
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 打开要停用的实例对应的“更多操作”菜单 ,然后选择修改。
- 在自定义实例下,展开数据保护部分。
- 清除启用时间点恢复。
- 点击保存。
gcloud
- 停用时间点恢复:
gcloud sql instances patch INSTANCE_NAME \ --no-enable-point-in-time-recovery
- 确认更改:
gcloud sql instances describe INSTANCE_NAME
在
backupConfiguration
部分中,如果更改成功,您会看到pointInTimeRecoveryEnabled: false
。
REST v1
在使用任何请求数据之前,请先进行以下替换:
- project-id:项目 ID
- instance-id:实例 ID
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id
请求 JSON 正文:
{ "settings": { "backupConfiguration": { "enabled": false, "pointInTimeRecoveryEnabled": false } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
REST v1beta4
在使用任何请求数据之前,请先进行以下替换:
- project-id:项目 ID
- instance-id:实例 ID
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id
请求 JSON 正文:
{ "settings": { "backupConfiguration": { "enabled": false, "pointInTimeRecoveryEnabled": false } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
检查用于 PITR 的事务日志的存储位置
您可以检查 Cloud SQL 实例存储用于 PITR 的事务日志的位置。
gcloud
如需确定您的实例是将 PITR 的日志存储在磁盘还是 Cloud Storage 上,请使用以下命令:
gcloud sql instances describe INSTANCE_NAME
将 INSTANCE_NAME 替换为实例名称。
对于同一项目中的多个实例,您还可以查看事务日志的存储位置。如需确定多个实例的位置,请使用以下命令:
gcloud sql instances list --show-transactional-log-storage-state
示例响应:
NAME DATABASE_VERSION LOCATION TRANSACTIONAL_LOG_STORAGE_STATE my_01 SQLSERVER_2019_STANDARD us-central-1 DISK my_02 SQLSERVER_2019_STANDARD us-central-1 CLOUD_STORAGE ...
在命令的输出中,transactionalLogStorageState
字段或 TRANSACTIONAL_LOG_STORAGE_STATE
列提供有关为实例存储 PITR 事务日志的位置的信息。
可能的事务日志存储状态如下:
DISK
:实例将用于 PITR 的事务日志存储在磁盘上。CLOUD_STORAGE
:实例将用于 PITR 的事务日志存储在 Cloud Storage 中。
设置事务日志保留
如需设置保留事务日志的天数,请执行以下操作:
控制台
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 打开要为其设置事务日志的实例对应的“更多操作”菜单 ,然后选择修改。
- 在自定义实例下,展开数据保护部分。
- 在启用时间点恢复部分中,展开高级选项。
- 输入保留日志的天数(对于 Cloud SQL 企业 Plus 版为 1-35,对于 Cloud SQL 企业版为 1-7)。
- 点击保存。
gcloud
修改实例以设置事务日志的保留天数。
替换以下内容:
- INSTANCE_NAME:要为其设置事务日志的实例的名称。
DAYS_TO_RETAIN:要保留的事务日志的天数。对于 Cloud SQL 企业 Plus 版,有效范围介于 1 到 35 天之间,默认值为 14 天。对于 Cloud SQL 企业版,有效范围介于 1 到 7 天之间,默认值为 7 天。
如果您未指定值,则 Cloud SQL 会使用默认值。 仅在启用 PITR 时有效。保留更多天数的事务日志需要更大的存储空间。
gcloud sql instances patch INSTANCE_NAME \ --retained-transaction-log-days=DAYS_TO_RETAIN
REST v1
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:项目 ID。
- INSTANCE_ID:实例 ID。
DAYS_TO_RETAIN:保留事务日志的天数。对于 Cloud SQL 企业 Plus 版,有效范围介于 1 到 35 天之间,默认值为 14 天。对于 Cloud SQL 企业版,有效范围介于 1 到 7 天之间,默认值为 7 天。
如果未指定任何值,则使用默认值。仅在启用 PITR 时有效。保留更多天数的事务日志需要更大的存储空间。
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID
请求 JSON 正文:
{ "settings": { "backupConfiguration": { "transactionLogRetentionDays": "DAYS_TO_RETAIN" } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
REST v1beta4
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:项目 ID。
- INSTANCE_ID:实例 ID。
DAYS_TO_RETAIN:保留事务日志的天数。对于 Cloud SQL 企业 Plus 版,有效范围介于 1 到 35 天之间,默认值为 14 天。对于 Cloud SQL 企业版,有效范围介于 1 到 7 天之间,默认值为 7 天。
如果未指定任何值,则使用默认值。仅在启用 PITR 时有效。保留更多天数的事务日志需要更大的存储空间。
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID
请求 JSON 正文:
{ "settings": { "backupConfiguration": { "transactionLogRetentionDays": "DAYS_TO_RETAIN" } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
问题排查
问题 | 问题排查 |
---|---|
或
|
您提供的时间戳无效。 |
或
|
您提供的时间戳是找不到备份或二进制日志坐标的时间。 |
后续步骤
- 在克隆上配置标志