配置时间点恢复 (PITR)

当您在 Google Cloud 控制台中创建新实例时,自动备份时间点恢复 (PITR) 都会自动启用。您可以按以下步骤为任何现有实例配置 PITR:

启用 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-bin-log

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

    --retained-transaction-log-days=RETAINED_TRANSACTION_LOG_DAYS
  4. 确认更改:
    gcloud sql instances describe INSTANCE_NAME

    backupConfiguration 部分,如果更改成功,您会看到 binaryLogEnabled: true

Terraform

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

resource "google_sql_database_instance" "default" {
  name             = "mysql-instance-pitr"
  region           = "asia-northeast1"
  database_version = "MYSQL_8_0"
  settings {
    tier = "db-f1-micro"
    backup_configuration {
      enabled                        = true
      binary_log_enabled             = true
      start_time                     = "20:55"
      transaction_log_retention_days = "3"
    }
  }
}

应用更改

如需在 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,
      "binaryLogEnabled": true
    }
  }
}

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

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

REST v1beta4

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

  • PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
  • INSTANCE_NAME:您为实现高可用性而配置的主实例或读取副本实例的名称
  • START_TIME:时间(以小时和分钟为单位)

HTTP 方法和网址:

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

请求 JSON 正文:

{
  "settings":
  {
    "backupConfiguration":
    {
      "startTime": "START_TIME",
      "enabled": true,
      "binaryLogEnabled": true
    }
  }
}

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

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

停用 PITR

控制台

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

    转到“Cloud SQL 实例”

  2. 打开要停用的实例对应的“更多操作”菜单 “更多操作”图标。,然后选择修改
  3. 自定义实例下,展开数据保护部分。
  4. 清除启用时间点恢复
  5. 点击保存

gcloud

  1. 停用时间点恢复:
    gcloud sql instances patch INSTANCE_NAME \
    --no-enable-bin-log
  2. 确认更改:
    gcloud sql instances describe INSTANCE_NAME

    backupConfiguration 部分,如果更改成功,您会看到 binaryLogEnabled: 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,
      "binaryLogEnabled": 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,
      "binaryLogEnabled": false
    }
  }
}

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

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

设置事务日志保留

如需设置保留二进制日志的天数:

控制台

  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 天。

    如果您未指定值,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 响应:

检查用于 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 MYSQL_8_0        us-central-1     DISK
my_02 MYSQL_8_0        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 期间出现的问题,了解可能的后续步骤。

切换后的事务日志存储和配置

出于复制目的,Cloud SQL 仍会在磁盘上保留二进制日志的副本。

如果您想使用 mysqlbinlog 实用程序浏览二进制日志,将二进制日志存储在磁盘上就非常有用。

如果您在切换之前在实例上配置了 expire_logs_daysbinlog_expire_logs_seconds 标志,则配置的值将保持不变。

切换后,由于用于执行 PITR 的二进制日志现在存储在 Cloud Storage 中,因此请确保标志的值反映了您预期的磁盘上事务日志的保留情况。Cloud SQL 仅按照以下最小值之一在磁盘上保留日志:

  • 切换前的 transactionLogRetentionDays PITR 配置设置。此设置的默认值为 7 天。
  • 您在实例上手动设置的 expire_logs_daysbinlog_expire_logs_seconds 标志。

如果要节省磁盘空间,请在切换过程完成后,将 expire_logs_daysbinlog_expire_logs_seconds 标志的值配置为 1 天,以便减小分配的磁盘大小和磁盘存储费用。如需详细了解事务日志存储和 PITR,请参阅 PITR 的日志存储

如需详细了解如何检查磁盘使用量,请参阅日志和磁盘使用量

排查切换到 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 切换事务日志的存储位置。
MySQL transactional logging is not enabled on this instance. MySQL 使用二进制日志记录作为时间点恢复 (PITR) 的事务日志。为了支持 PITR,MySQL 要求您在实例上启用二进制日志记录。如需详细了解如何启用二进制日志记录,请参阅启用 PITR
This command is not supported on replica instances. Run the command on the primary instance instead. 请确保在运行命令或发出 API 请求时指定主实例。
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 的事务日志的存储位置中的命令。

后续步骤