使用时间点恢复 (PITR)

本页面介绍了如何使用时间点恢复 (PITR) 来恢复 Cloud SQL 主实例。

如需详细了解 PITR,请参阅 PITR

用于 PITR 的日志存储

PITR 使用事务日志。这些日志会定期更新,并且会占用一定的存储空间。事务日志会连同其相关联的自动备份自动删除,通常是大约 7 天后删除。

如果事务日志的大小导致实例出现问题:

  • 您可以增加实例存储空间大小,但磁盘用量中的事务日志大小的增加可能是临时的。

  • 我们建议启用存储空间自动扩容功能,以避免意外的存储问题。

  • 如果要删除日志并恢复存储空间,您可以停用 PITR。减小所占用的存储空间不会缩小为实例预配的存储空间大小。

  • 日志每天完全清除一次,不会持续清除。将日志保留设置为两天意味着系统会保留至少两天、最多三天的日志。我们建议将备份数量设置为日志保留天数加 1,以保证日志至少保留指定的最少天数。

用于 PITR 的数据库恢复模型

当您在实例上启用 PITR 时,Cloud SQL 会自动将现有数据库和后续数据库的恢复模型设置为完整恢复模型。

如需详细了解 SQL Server 恢复模型,请参阅 Microsoft 文档

启用 PITR

当您在 Google Cloud 控制台中创建新实例时,系统会自动启用自动备份设置。

以下过程会在现有实例上启用 PITR。

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 打开要启用 PITR 的实例对应的“更多操作”菜单 “更多操作”图标。,然后点击修改
  3. 自定义实例下,展开数据保护部分。
  4. 选中启用时间点恢复复选框。
  5. 展开高级选项
  6. 输入保留日志的天数(1 到 7 天)。
  7. 点击保存

gcloud

  1. 显示实例概览:
    gcloud sql instances describe INSTANCE_NAME
  2. 如果您在 backupConfiguration 部分中看到 enabled: false,请启用计划备份:
    gcloud sql instances patch INSTANCE_NAME \
    --backup-start-time=HH:MM

    使用 UTC±00 时区的 24 小时制时间指定 backup-start-time 参数。

  3. 启用 PITR:
    gcloud sql instances patch INSTANCE_NAME \
    --enable-point-in-time-recovery

    如果您要在主实例上启用 PITR,还可以通过添加以下参数来配置要保留事务日志的天数:

    --retained-transaction-log-days=RETAINED_TRANSACTION_LOG_DAYS
  4. 确认更改:
    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

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 打开要恢复的实例对应的“更多操作”菜单 “更多操作”图标。,然后点击创建克隆
  3. (可选)在创建克隆页面上,更新新克隆的 ID。
  4. 选择从较早的时间点克隆
  5. 输入 PITR 时间。
  6. 选择所有数据库,或指定数据库名称。
    如果您指定数据库名称,则只能选择一个名称。默认情况下,PITR 会用于所有数据库。
  7. 点击创建克隆

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

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 打开要停用的实例对应的“更多操作”菜单 “更多操作”图标。,然后选择修改
  3. 自定义实例下,展开数据保护部分。
  4. 清除启用时间点恢复
  5. 点击保存
  6. 在实例的概览页面中的配置下,PITR 设置被列为已停用。

gcloud

  1. 停用时间点恢复:
    gcloud sql instances patch INSTANCE_NAME \
    --no-enable-point-in-time-recovery
  2. 确认更改:
    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 替换为实例名称。

在命令的输出中,transactionalLogStorageState 字段提供有关为实例存储 PITR 事务日志的位置的信息。

返回的事务日志存储位置为 DISK。SQL Server 实例只能将用于 PITR 的事务日志存储在磁盘上。

设置事务日志保留

如需设置保留事务日志的天数,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 打开要为其设置事务日志的实例对应的“更多操作”菜单 “更多操作”图标。,然后选择修改
  3. 自定义实例下,展开数据保护部分。
  4. 启用时间点恢复部分中,展开高级选项
  5. 输入保留日志的天数(1 到 7 天)。
  6. 点击保存

gcloud

修改实例以设置事务日志的保留天数。

请替换以下内容:

  • INSTANCE-NAME - 要为其设置事务日志的实例的名称。
  • DAYS-TO-RETAIN - 要保留的事务日志的天数。有效范围在 1 到 7 之间。如果未指定,则默认值为 7。仅在启用时间点恢复时有效。保留更多天数的事务日志需要更大的存储空间。

  gcloud sql instances patch INSTANCE-NAME \
    --retained-transaction-log-days=DAYS-TO-RETAIN
  

REST v1

在使用任何请求数据之前,请先进行以下替换:

  • days-to-retain:保留事务日志的天数(1 到 7 天)
  • project-id:项目 ID
  • instance-id:实例 ID

HTTP 方法和网址:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

请求 JSON 正文:

{
  "settings":
  {
    "backupConfiguration":
    {
      "transactionLogRetentionDays": "days-to-retain"
    }
  }
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

REST v1beta4

在使用任何请求数据之前,请先进行以下替换:

  • days-to-retain:保留事务日志的天数(1 到 7 天)
  • project-id:项目 ID
  • instance-id:实例 ID

HTTP 方法和网址:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

请求 JSON 正文:

{
  "settings":
  {
    "backupConfiguration":
    {
      "transactionLogRetentionDays": "days-to-retain"
    }
  }
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

后续步骤