使用时间点恢复 (PITR)

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

如需详细了解 PITR, 请参阅时间点恢复 (PITR)

默认情况下,在您创建 Cloud SQL 企业 Plus 版实例时,系统会启用 PITR,无论您使用 Google Cloud 控制台、gcloud CLI、Terraform 还是 Cloud SQL Admin API。

如果您在 Google Cloud 控制台中创建 Cloud SQL 企业版实例,则 PITR 在默认情况下处于启用状态。否则,如果您使用 gcloud CLI、Terraform 或 Cloud SQL Admin API 创建实例,则必须手动启用 PITR。

用于 PITR 的日志存储

Cloud SQL 对 PITR 使用预写式日志记录 (WAL) 归档。

我们于 2023 年 1 月 9 日发布了在 Cloud Storage 中存储 PITR 的预写式日志的功能。自从此功能发布以来,以下条件适用:

  • 所有 Cloud SQL 企业 Plus 版实例都将其预写式日志存储在 Cloud Storage 中。只有您从 Cloud SQL 企业版升级且在 2023 年 1 月 9 日之前启用了 PITR 的 Cloud SQL 企业 Plus 版实例才会继续将其日志存储在磁盘上。
  • 您所创建并在 2023 年 1 月 9 日之前启用了 PITR 的 Cloud SQL 企业版实例会继续将其日志存储在磁盘上。
  • 如果您在 2024 年 8 月 15 日之后将在磁盘上存储 PITR 事务日志的 Cloud SQL 企业版实例升级为 Cloud SQL 企业 Plus 版,则升级过程会将用于 PITR 的事务日志的存储位置切换到 Cloud Storage。如需了解详情,请参阅使用就地升级将实例升级到 Cloud SQL 企业 Plus 版
  • 您所创建并在 2023 年 1 月 9 日之后启用 PITR 的所有 Cloud SQL 企业版实例都将其日志存储在 Cloud Storage 中。

对于仅在磁盘上存储预写式日志的实例,您可以使用 gcloud CLI 或 Cloud SQL Admin API 将用于 PITR 的事务日志的存储位置从磁盘切换到 Cloud Storage,而不会造成任何停机时间。如需了解详情,请参阅将交易日志存储切换到 Cloud Storage

日志保留期限

如需查看实例是否将用于 PITR 的日志存储在 Cloud Storage 中,请按照检查用于 PITR 的事务日志的存储位置操作。

使用 PostgreSQL 客户端(例如 psqlpgAdmin)连接到实例的数据库后,请运行以下命令:show archive_command。如果有任何预写式日志归档在 Cloud Storage 中,您会看到 -async_archive -remote_storage

所有其他启用了 PITR 的现有实例都会继续将其日志存储在磁盘上。

如果日志存储在 Cloud Storage 中,则 Cloud SQL 每 5 分钟或更短时间上传一次日志。因此,如果 Cloud SQL 实例可用,则该实例可以恢复到最近时间。但是,如果实例不可用,则恢复点目标通常不超过 5 分钟。使用 gcloud CLI 或 Admin API 检查实例可恢复到的最近时间,并执行到该时间的恢复。

PITR 中使用的预写式日志会连同其关联的自动备份自动删除,通常是在满足为 transactionLogRetentionDays 设置的值后删除。这是 Cloud SQL 为进行 PITR 而保留的事务日志的天数。对于 Cloud SQL 企业 Plus 版,可以将保留事务日志的天数设置为 1 到 35 天;对于 Cloud SQL 企业版,可以将值设置为 1 到 7。

在启用 PITR 之前,在 Cloud SQL 实例上恢复备份时,您会丢失可用于实现 PITR 的预写式日志。

对于启用了客户管理的加密密钥 (CMEK) 的实例,系统会使用最新版本的 CMEK 加密预写式日志。如需执行恢复操作,应提供所有在为 retained-transaction-log-days 参数配置的天数内保持最新的密钥版本。

对于在 Cloud Storage 中存储预写式日志的实例,日志存储在主实例所在的区域中。此日志存储(对于 PITR 的最大时长,Cloud SQL 企业 Plus 版最多为 35 天,Cloud SQL 企业版最多为 7 天)不会为每个实例产生额外费用。

日志和磁盘使用量

如果实例启用了 PITR,并且磁盘上的预写式日志的大小导致实例出现问题:

  • 您可以使用 gcloud CLI 或 Cloud SQL Admin API,将用于 PITR 的日志的存储位置从磁盘切换到 Cloud Storage,而不会造成停机。

  • 您可以将实例升级到 Cloud SQL 企业 Plus 版

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

  • 我们建议启用存储空间自动扩容功能,以避免意外的存储问题。 仅当实例启用了 PITR 且日志存储在磁盘上时,此建议才适用。

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

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

    例如,如果您为 transactionLogRetentionDays 参数的值指定 7,则对于 backupRetentionSettings 参数,请将 retainedBackups 的数量设置为 8

启用 PITR

当您在 Google Cloud 控制台中创建新实例时,自动备份启用时间点恢复都会自动启用。

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

控制台

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

    转到“Cloud SQL 实例”

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

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

Terraform

如需启用 PITR,请使用 Terraform 资源

resource "google_sql_database_instance" "postgres_instance_pitr" {
  name             = ""
  region           = "us-central1"
  database_version = "POSTGRES_14"
  settings {
    tier = "db-custom-2-7680"
    backup_configuration {
      enabled                        = true
      point_in_time_recovery_enabled = true
      start_time                     = "20:55"
      transaction_log_retention_days = "3"
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

应用更改

如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。

准备 Cloud Shell

  1. 启动 Cloud Shell
  2. 设置要在其中应用 Terraform 配置的默认 Google Cloud 项目。

    您只需为每个项目运行一次以下命令,即可在任何目录中运行它。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。

准备目录

每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。

  1. Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有 .tf 扩展名,例如 main.tf。在本教程中,该文件称为 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。

    将示例代码复制到新创建的 main.tf 中。

    (可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。

  3. 查看和修改要应用到您的环境的示例参数。
  4. 保存更改。
  5. 初始化 Terraform。您只需为每个目录执行一次此操作。
    terraform init

    (可选)如需使用最新的 Google 提供程序版本,请添加 -upgrade 选项:

    terraform init -upgrade

应用更改

  1. 查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
    terraform plan

    根据需要更正配置。

  2. 通过运行以下命令并在提示符处输入 yes 来应用 Terraform 配置:
    terraform apply

    等待 Terraform 显示“应用完成!”消息。

  3. 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。

删除更改

如需删除更改,请执行以下操作:

  1. 如需停用删除防护,请在 Terraform 配置文件中将 deletion_protection 参数设置为 false
    deletion_protection =  "false"
  2. 运行以下命令并在提示符处输入 yes,以应用更新后的 Terraform 配置:
    terraform apply
  1. 运行以下命令并在提示符处输入 yes,以移除之前使用 Terraform 配置应用的资源:

    terraform destroy

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

控制台

由于以下原因,您可能需要将不可用的实例恢复到其他可用区:

  • 配置了实例的可用区无法访问。此实例处于 FAILED 状态。
  • 实例正在进行维护。此实例处于 MAINTENANCE 状态。

如需恢复不可用的实例,请完成以下步骤:

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

    转到“Cloud SQL 实例”

  2. 找到要克隆的实例的行。
  3. 操作列中,点击 更多操作菜单。
  4. 点击创建克隆
  5. 创建克隆页面上,完成以下操作:
    1. 实例 ID 字段中,根据需要更新实例 ID。
    2. 点击从较早的时间点克隆
    3. 时间点字段中,选择要克隆数据的日期和时间。这将恢复该时间点的实例状态。
    4. 点击创建克隆
  6. 克隆初始化时,您将返回到实例列表页面。

gcloud

由于配置了实例的可用区无法访问,您可能需要将不可用的实例恢复到其他可用区。

gcloud sql instances clone SOURCE_INSTANCE_NAME TARGET_INSTANCE_NAME \
--point-in-time DATE_AND_TIME_STAMP \
--preferred-zone ZONE_NAME \
--preferred-secondary-zone SECONDARY_ZONE_NAME

运行 gcloud sql instances clone 命令的用户或服务账号必须拥有 cloudsql.instances.clone 权限。如需详细了解运行 gcloud CLI 命令所需的权限,请参阅 Cloud SQL 权限

REST v1

由于配置了实例的可用区无法访问,您可能需要将不可用的实例恢复到其他可用区。

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

  • PROJECT_ID:项目 ID。
  • SOURCE_INSTANCE_NAME:源实例的名称。
  • TARGET_INSTANCE_NAME:目标(克隆)实例的名称。
  • DATE_AND_TIME_STAMP:源实例的日期和时间戳,采用世界协调时间 (UTC) 时区RFC 3339 格式(例如
    2012-11-15T16:19:00.094Z)。
  • ZONE_NAME:可选。目标实例的主可用区的名称。这用于指定与您要克隆的 Cloud SQL 实例不同的主要可用区。对于区域实例,此可用区会替换主要可用区,但次要可用区与该实例相同。
  • SECONDARY_ZONE_NAME:可选。目标实例的次要可用区的名称。这用于指定与您要克隆的 Cloud SQL 实例不同的次要可用区。

HTTP 方法和网址:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone

请求 JSON 正文:

{
  "cloneContext":
  {
    "destinationInstanceName": "TARGET_INSTANCE_NAME",
    "pointInTime": "DATE_AND_TIME_STAMP",
    "preferredZone": "ZONE_NAME",
    "preferredSecondaryZone": "SECONDARY_ZONE_NAME"
  }
}

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

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

使用 instances.clone API 方法的用户或服务账号必须拥有 cloudsql.instances.clone 权限。如需详细了解使用 API 方法所需的权限,请参阅 Cloud SQL 权限

REST v1beta4

由于配置了实例的可用区无法访问,您可能需要将不可用的实例恢复到其他可用区。

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

  • PROJECT_ID:项目 ID。
  • SOURCE_INSTANCE_NAME:源实例的名称。
  • TARGET_INSTANCE_NAME:目标(克隆)实例的名称。
  • DATE_AND_TIME_STAMP:源实例的日期和时间戳,采用世界协调时间 (UTC) 时区RFC 3339 格式(例如
    2012-11-15T16:19:00.094Z)。
  • ZONE_NAME:可选。目标实例的主可用区的名称。这用于指定与您要克隆的 Cloud SQL 实例不同的主要可用区。对于区域实例,此可用区会替换主要可用区,但次要可用区与该实例相同。
  • SECONDARY_ZONE_NAME:可选。目标实例的次要可用区的名称。这用于指定与您要克隆的 Cloud SQL 实例不同的次要可用区。

HTTP 方法和网址:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone

请求 JSON 正文:

{
  "cloneContext":
  {
    "destinationInstanceName": "TARGET_INSTANCE_NAME",
    "pointInTime": "DATE_AND_TIME_STAMP",
    "preferredZone": "ZONE_NAME",
    "preferredSecondaryZone": "SECONDARY_ZONE_NAME"
  }
}

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

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

使用 instances.clone API 方法的用户或服务账号必须拥有 cloudsql.instances.clone 权限。如需详细了解使用 API 方法所需的权限,请参阅 Cloud SQL 权限

获取最近的恢复时间

对于可用实例,您可以执行恢复到最近时间的 PITR。如果实例不可用,并且实例日志存储在 Cloud Storage 中,您可以检索最近的恢复时间并执行到该时间的 PITR。在这两种情况下,您都可以通过为首选可用区提供值来将实例恢复到其他主要可用区或次要可用区

gcloud

获取不可用的 Cloud SQL 实例可以恢复到的最近时间。

INSTANCE_NAME 替换为您要查询的实例的名称。

gcloud sql instances get-latest-recovery-time INSTANCE_NAME

REST v1

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

  • PROJECT_ID:项目 ID
  • INSTANCE_NAME:您要查询最近恢复时间的实例的名称

HTTP 方法和网址:

GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime

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

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

{
  "kind": "sql#getLatestRecoveryTime",
  "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z"
}

REST v1beta4

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

  • PROJECT_ID:项目 ID
  • INSTANCE_NAME:您要查询最近恢复时间的实例的名称

HTTP 方法和网址:

GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime

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

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

{
  "kind": "sql#getLatestRecoveryTime",
  "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z"
}

执行 PITR

控制台

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

    转到“Cloud SQL 实例”

  2. 打开要恢复的实例对应的“更多操作”菜单 “更多操作”图标。,然后点击创建克隆
  3. (可选)在创建克隆页面上,更新新克隆的 ID。
  4. 选择从较早的时间点克隆
  5. 输入 PITR 时间。
  6. 点击创建克隆

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:在恢复之前所处的时间点

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:在恢复之前所处的时间点

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. 点击保存

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 替换为实例名称。

您还可以查看同一项目中多个实例的事务日志的存储位置。 如需确定多个实例的位置,请使用以下命令:

   gcloud sql instances list --show-transactional-log-storage-state
   

示例响应:

NAME  DATABASE_VERSION LOCATION         TRANSACTIONAL_LOG_STORAGE_STATE
my_01 POSTGRES_12      us-central-1     DISK
my_02 POSTGRES_12      us-central-1     CLOUD_STORAGE
...
   

在命令的输出中,transactionalLogStorageState 字段或 TRANSACTIONAL_LOG_STORAGE_STATE 列提供有关为实例存储 PITR 事务日志的位置的信息。 可能的事务日志存储状态如下:

  • DISK:实例将用于 PITR 的事务日志存储在磁盘上。 如果您将 Cloud SQL 企业版实例升级到 Cloud SQL 企业 Plus 版,则升级过程会自动将日志存储位置切换到 Cloud Storage。如需了解详情,请参阅使用就地升级将实例升级到 Cloud SQL 企业 Plus 版。 您还可以选择使用 gcloud CLI 或 Cloud SQL Admin API 切换存储位置,而无需升级实例的版本,并且不会造成任何停机时间。如需了解详情,请参阅将交易日志存储切换到 Cloud Storage
  • SWITCHING_TO_CLOUD_STORAGE:实例正在将 PITR 事务日志的存储位置切换到 Cloud Storage。
  • SWITCHED_TO_CLOUD_STORAGE:实例已完成将 PITR 事务日志的存储位置从磁盘切换到 Cloud Storage 的操作。
  • CLOUD_STORAGE:实例将用于 PITR 的事务日志存储在 Cloud Storage 中。

将事务日志存储空间切换到 Cloud Storage

如果您的实例将用于 PITR 的事务日志存储在磁盘上,则您可以将存储位置切换到 Cloud Storage,而不会造成任何停机时间。切换存储位置的整个过程大约需要事务日志保留期(天)的时长才能完成。一旦您启动切换,交易日志就会开始在 Cloud Storage 中累积。在操作期间,您可以使用检查用于 PITR 的事务日志的存储位置中的命令检查整个过程的状态。

切换到 Cloud Storage 的整个过程完成后,Cloud SQL 会使用 Cloud Storage 中的事务日志进行 PITR。

gcloud

如需将存储位置切换到 Cloud Storage,请使用以下命令:

   gcloud sql instances patch INSTANCE_NAME \
      --switch-transaction-logs-to-cloud-storage
   

INSTANCE_NAME 替换为实例名称。 该实例必须是主实例,而不是副本实例。响应类似于以下示例:

The following message is used for the patch API method.
{"name": "INSTANCE_NAME", "project": "PROJECT_NAME", "switchTransactionalLogsToCloudStorageEnabled": "true"}

Patching Cloud SQL instance...done.
Updated
[https://sqladmin.prod.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME].
   

如果该命令返回错误,请参阅排查改用 Cloud Storage 的问题,了解可能的后续步骤。

REST v1

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

  • PROJECT_ID:项目 ID。
  • INSTANCE_ID:实例 ID。 该实例必须是主实例,而不是副本实例。

HTTP 方法和网址:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID

请求 JSON 正文:

{
   "switchTransactionLogsToCloudStorageEnabled": true
}

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

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

如果请求返回错误,请参阅对改用 Cloud Storage 进行问题排查,了解可能的后续步骤。

REST v1beta4

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

  • PROJECT_ID:项目 ID。
  • INSTANCE_ID:实例 ID。 该实例必须是主实例,而不是副本实例。

HTTP 方法和网址:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID

请求 JSON 正文:

{
   "switchTransactionLogsToCloudStorageEnabled": true
}

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

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

如果请求返回错误,请参阅对改用 Cloud Storage 进行问题排查,了解可能的后续步骤。

设置事务日志保留

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

控制台

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

    转到“Cloud SQL 实例”

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

gcloud

修改实例以设置保留预写日志的天数。

替换以下内容:

  • INSTANCE_NAME:要为其设置事务日志的实例的名称。
  • DAYS_TO_RETAIN:要保留的事务日志的天数。对于 Cloud SQL 企业 Plus 版,有效范围介于 1 到 35 天之间,默认值为 14 天。对于 Cloud SQL 企业版,有效范围介于 1 到 7 天之间,默认值为 7 天。

    如果未指定任何值,则使用默认值。此选项仅在启用 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 响应:

问题排查

问题 问题排查

argument --point-in-time: Failed to parse date/time:
Unknown string format: 2021-0928T30:54:03.094;
received: 2021-0928T30:54:03.094Z

Invalid value at 'body.clone_context.point_in_time'
(type.googleapis.com/google.protobuf.Timestamp), Field 'pointInTime',
Invalid time format: Failed to parse input,

您提供的时间戳无效。

HTTP Error 400: Successful backup required for carrying out the operation was not found.

Successful backup required for carrying out the operation was not found. or Time where no backups can be found.

您提供的时间戳是找不到备份或二进制日志坐标的时间。

排查切换到 Cloud Storage 的问题

下表列出了在将事务日志的存储位置从磁盘切换到 Cloud Storage 时,可能会返回的 INVALID REQUEST 代码错误。

问题 问题排查
Switching the storage location of the transaction logs used for PITR is not supported for instances with database type %s. 确保您是在 Cloud SQL for MySQL 或 Cloud SQL for PostgreSQL 实例上运行 gcloud CLI 命令或发出 API 请求。Cloud SQL for SQL Server 不支持使用 gcloud CLI 或 Cloud SQL Admin API 切换事务日志的存储位置。
PostgreSQL transactional logging is not enabled on this instance. PostgreSQL 使用预写式日志记录作为事务日志进行时间点恢复 (PITR)。为了支持 PITR,PostgreSQL 要求您在实例上启用预写式日志记录。如需详细了解如何启用预写日志,请参阅启用 PITR
This instance is already storing transaction logs used for PITR in Cloud Storage 如需验证事务日志的存储位置,请运行检查用于 PITR 的事务日志的存储位置中的命令。
The instance is already switching transaction logs used for PITR from disk to Cloud Storage.

等待切换操作完成。

如需验证操作状态和事务日志的存储位置,请参阅检查用于 PITR 的事务日志的存储位置中的命令。

后续步骤