创建和管理按需备份和自动备份

本页面介绍如何安排和停用自动备份、创建和管理按需备份,以及查看 Cloud SQL 实例的备份。

如需详细了解备份的工作原理,请参阅备份概览

创建按需备份

如需创建按需备份,请执行以下操作:

控制台

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

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 从 SQL 导航菜单中选择备份
  4. 点击创建备份
  5. 创建备份页面上,根据需要添加说明,然后点击创建

gcloud

创建备份:

gcloud sql backups create \
--async \
--instance=INSTANCE_NAME

您可以使用 --description 参数提供备份的说明。

要在自定义位置创建备份,请执行以下操作:

gcloud sql backups create \
--async \
--instance=INSTANCE_NAME \
--location=BACKUP_LOCATION

REST v1

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

  • project-id:项目 ID
  • instance-id:实例 ID

HTTP 方法和网址:

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

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

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

REST v1beta4

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

  • project-id:项目 ID
  • instance-id:实例 ID

HTTP 方法和网址:

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

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

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

安排自动备份

如需为实例安排自动备份,请按如下所述操作:

控制台

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

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 从 SQL 导航菜单中选择备份
  4. 点击设置旁边的修改
  5. 选择要自动备份的数据的时间范围。
  6. 点击保存

gcloud

  1. 修改实例以指定备份开始时间:
    gcloud sql instances patch INSTANCE_NAME --backup-start-time=HH:MM
    backup-start-time 参数采用 UTC±00 时区的 24 小时时间格式,用于指定一个 4 小时备份时段的开始时间。备份可在该时段内随时启动。
  2. 确认所做的更改:
    gcloud sql instances describe INSTANCE_NAME
    backupConfiguration 部分中,确认您可以看到 enabled: true 和您指定的时间。

Terraform

如需为数据库创建备份,请使用 Terraform 资源

resource "google_sql_database_instance" "instance" {
  name             = "postgres-instance-backup"
  region           = "us-central1"
  database_version = "POSTGRES_14"
  settings {
    tier = "db-custom-2-7680"
    backup_configuration {
      enabled    = true
      start_time = "20:55"
    }
  }
  # 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,
      "binaryLogEnabled": true
    }
  }
}

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

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

REST v1beta4

您可以同时启用 pointInTimeRecovery,方法是将 backupConfiguration 对象中的 pointInTimeRecoveryEnabled 设置为 true

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

  • 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 响应:

为备份设置自定义位置

只有在法规要求时,才使用自定义备份位置。如果不要求,请使用默认的多区域备份位置。

您可以将自定义位置用于按需备份和自动备份。如需查看有效位置值的完整列表,请参阅实例位置

如需使用自定义位置更新实例,请执行以下操作:

控制台

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

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 从 SQL 导航菜单中选择备份
  4. 点击设置旁边的修改
  5. 自动备份部分中,展开高级选项
  6. 点击多区域(默认)单区域
  7. 位置下拉菜单中选择相应位置。
  8. 点击保存

gcloud

如需了解参考信息,请参阅 gcloud sql instances patch

gcloud sql instances patch INSTANCE_NAME \
--backup-location=BACKUP_LOCATION
  

Terraform

如需为数据库实例备份指定自定义位置,请使用 Terraform 资源

resource "google_sql_database_instance" "default" {
  name             = "postgres-instance-with-backup-location"
  region           = "us-central1"
  database_version = "POSTGRES_14"
  settings {
    tier = "db-custom-2-7680"
    backup_configuration {
      enabled  = true
      location = "us-central1"
    }
  }
  # 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
}

REST v1

使用实例的 settings.backupConfiguration.location 参数作为备份位置。

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

  • region:项目区域
  • backup-region:备份区域
  • project-id:项目 ID
  • instance-id:实例 ID

HTTP 方法和网址:

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

请求 JSON 正文:

{
  "region": "region"
  "settings":
  {
    "backupConfiguration":
    {
      "location": "backup-region",
      "enabled": true,
    }
  }
}

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

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

REST v1beta4

使用实例的 settings.backupConfiguration.location 参数作为备份位置。

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

  • region:项目区域
  • backup-region:备份区域
  • project-id:项目 ID
  • instance-id:实例 ID

HTTP 方法和网址:

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

请求 JSON 正文:

{
  "region": "region"
  "settings":
  {
    "backupConfiguration":
    {
      "location": "backup-region",
      "enabled": true,
    }
  }
}

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

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

查看备份列表

如需查看备份列表以及备份详情,请使用以下选项。

Google Cloud 控制台不会在备份历史记录中显示被跳过或失败的备份。如需查看被跳过的备份,请使用 gcloud 或 API。

控制台

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

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 从 SQL 导航菜单中选择备份,查看最近的备份、备份创建时间和备份类型。

gcloud

  • 列出实例的备份:
    gcloud sql backups list \
    --instance INSTANCE_NAME

    您可以使用标准列表参数过滤和控制结果。 如需查看完整列表,请参阅 gcloud sql backups list 命令参考页面。

  • 通过从 backups list 命令的输出中指定备份 ID 来查看备份的详细信息。
    gcloud sql backups describe BACKUP_ID \
    --instance INSTANCE_NAME
        

REST v1

您还可以使用 BackupRuns:list 页面上的 API Explorer 发送 REST API 请求。

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

  • project-id:项目 ID
  • instance-id:实例 ID

HTTP 方法和网址:

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

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

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

REST v1beta4

您还可以使用 BackupRuns:list 页面上的 API Explorer 发送 REST API 请求。

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

  • project-id:项目 ID
  • instance-id:实例 ID

HTTP 方法和网址:

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

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

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

在服务中断期间查看备份列表

如果某个实例位于发生服务中断的区域中,则您只能将通配符 (-) 与 backupRuns.list API 结合使用来查看该实例的备份。该通配符会返回项目中的所有备份。请参阅恢复到其他实例

如果某个区域中的一个实例启用了客户管理的加密密钥 (CMEK),则在该区域发生服务中断时,您无法将该实例的备份恢复到其他区域。这是因为在实例上启用 CMEK 后,Cloud SQL 会使用区域 Cloud KMS 密钥进行加密。若要恢复一个 CMEK 实例的备份,Cloud SQL 必须有权访问 CMEK 密钥。在发生区域性服务中断时,无法访问相应区域中的 Cloud KMS 密钥。

gcloud

  1. 列出项目中每个实例的备份:
    gcloud sql backups list --instance -

    该命令会返回类似于以下的信息:

    {
          "kind": "sql#backupRun",
          "status": "SUCCESSFUL",
          "enqueuedTime": "2020-01-21T11:25:33.818Z",
          "id": "backup-id",
          "startTime": "2020-01-21T11:25:33.858Z",
          "endTime": "2020-01-21T11:26:18.663Z",
          "type": "AUTOMATED",
          "windowStartTime": "2020-01-21T10:00:00.479Z",
          "instance": "instance-id",
          "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/backupRuns/backup-id",
          "location": "us"
          "backupKind": "SNAPSHOT"
        }
  2. 找到所需实例的备份。如需恢复此备份,请参阅恢复到其他实例

REST v1

  1. 列出项目中的所有备份:

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

    • project-id:项目 ID
    • instance-id:实例 ID,或 -(对于项目中所有备份的列表)

    HTTP 方法和网址:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/-/backupRuns

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

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

  2. 找到所需实例的备份。如需恢复此备份,请参阅恢复到其他实例

REST v1beta4

  1. 列出项目中的所有备份:

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

    • project-id:项目 ID
    • instance-id:实例 ID,或 -(对于项目中所有备份的列表)

    HTTP 方法和网址:

    GET https://sqladmin.googleapis.com/v1beta4/projects/project-id/instances/-/backupRuns

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

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

  2. 找到所需实例的备份。如需恢复此备份,请参阅恢复到其他实例

查看备份位置

如需查看实例备份的位置,请使用 backupRuns

控制台

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

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 从 SQL 导航菜单中选择备份
  4. 在备份列表中,位置列列出了位置类型(多区域或单区域)以及每个备份所在的具体多区域或单区域。

gcloud

如需了解参考信息,请参阅 gcloud sql instances describe

  1. 列出实例的备份:
    gcloud sql backups list \
    --instance INSTANCE_NAME

    您可以使用标准列表参数过滤和控制结果。 如需查看完整列表,请参阅 gcloud sql backups list 命令参考页面。

  2. 如需列出一个备份的详情,请使用 backups list 命令输出中的 ID
    gcloud sql backups describe BACKUP_ID \
    --instance INSTANCE_NAME

REST v1

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

  • project-id:项目 ID
  • instance-id:实例 ID

HTTP 方法和网址:

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

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

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

在前面的示例中:
  • REGION 是原始实例所在的区域。
  • BACKUP_LOCATION 是您希望 Cloud SQL 存储备份的位置。

REST v1beta4

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

  • project-id:项目 ID
  • instance-id:实例 ID

HTTP 方法和网址:

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

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

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

在前面的示例中:
  • REGION 是原始实例所在的区域。
  • BACKUP_LOCATION 是您希望 Cloud SQL 存储备份的位置。

查看备份大小

您可以使用 gcloud CLI 或 API 查看 Cloud SQL 实例的备份大小。

gcloud

  1. 如需获取与 Google Cloud 项目关联的所有备份的列表,请使用 gcloud sql backups list 命令:

    gcloud sql backups list
  2. 如需查看备份的大小,请使用 gcloud sql backups describe 命令:

    gcloud sql backups describe BACKUP_ID \
    --instance=INSTANCE_NAME \
    --project=PROJECT_ID

    进行以下替换:

    • BACKUP_ID:备份的 ID。您可以从运行 gcloud sql backups list 命令的输出中获取此 ID。
    • INSTANCE_NAME:实例的名称。
    • PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号

    在输出中,maxChargeableBytes 参数会显示备份的大小(以字节为单位)。

REST

获取备份列表

您可以使用以下示例获取与 Google Cloud 项目关联的所有备份的列表。如需查看此调用的完整参数列表,请参阅 backupRuns.list 页面。

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

  • PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
  • INSTANCE_NAME:实例的名称

HTTP 方法和网址:

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

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

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

查看备份的详细信息

您可以使用以下示例查看备份的详细信息,包括备份大小。如需查看此调用的完整参数列表,请参阅 backupRuns.get 页面。

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

  • PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
  • INSTANCE_NAME:实例的名称。
  • BACKUP_ID:备份 ID。您可以从运行上一个调用的输出中获取此 ID。

HTTP 方法和网址:

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

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

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

设置自动备份保留

如需设置要保留的自动备份的数量,请按如下所述操作:

控制台

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

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 从 SQL 导航菜单中选择备份
  4. 点击修改
  5. 自动备份部分中,展开高级选项
  6. 输入一次要存储的备份数量
  7. 点击保存

gcloud

修改实例以设置要保留的自动备份数。 该数字不能小于默认值(七)。

gcloud sql instances patch INSTANCE_NAME \
--retained-backups-count=NUM_TO_RETAIN

Terraform

如需指定要为数据库实例保留的自动备份的数量,请使用 Terraform 资源

resource "google_sql_database_instance" "default" {
  name             = "postgres-instance-backup-retention"
  region           = "us-central1"
  database_version = "POSTGRES_14"
  settings {
    tier = "db-custom-2-7680"
    backup_configuration {
      enabled = true
      backup_retention_settings {
        retained_backups = 365
        retention_unit   = "COUNT"
      }
    }
  }

  # 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
}

REST v1beta4

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

  • unit:可选:保留单位可以是整数或字符串。目前支持的(默认)值为 1 或“COUNT”。
  • num-to-retain:要保留的自动备份的数量(1 到 365)
  • project-id:项目 ID
  • instance-id:实例 ID

HTTP 方法和网址:

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

请求 JSON 正文:

{
  "settings":
  {
    "backupConfiguration":
    {
      "backupRetentionSettings":
      {
        "retentionUnit": unit,
        "retainedBackups": "num-to-retain"
      }
    }
  }
}

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

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

删除备份

您可以删除自动备份和按需备份。

删除某个备份可能并不会释放与该备份大小相同的空间。 因为这是增量式备份,删除较旧的备份也许会将其中的部分内容转移到较新的备份中,从而使较新备份保持完整性。

控制台

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

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 从 SQL 导航菜单中选择备份
  4. 点击要删除的备份对应的“更多操作”图标 “更多操作”图标。
  5. 选择删除
  6. 在“删除备份”窗口的字段中输入 Delete,然后点击删除

gcloud

删除 Cloud SQL 实例的备份:

gcloud beta sql backups delete BACKUP_ID \
--instance INSTANCE_NAME
      

如需查看完整的参数列表,请参阅 gcloud beta sql backups delete 命令参考页面。

REST v1

  1. 列出备份以获取待删除备份的 ID:

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

    • project-id:项目 ID
    • instance-id:实例 ID

    HTTP 方法和网址:

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

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

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

  2. 删除备份:

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

    • project-id:项目 ID
    • instance-id:实例 ID
    • backup-id:备份 ID

    HTTP 方法和网址:

    DELETE https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/backupRuns/backup-id

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

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

REST v1beta4

  1. 列出备份以获取待删除备份的 ID:

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

    • project-id:项目 ID
    • instance-id:实例 ID

    HTTP 方法和网址:

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

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

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

  2. 删除备份:

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

    • project-id:项目 ID
    • instance-id:实例 ID
    • backup-id:备份 ID

    HTTP 方法和网址:

    DELETE https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/backupRuns/backup-id

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

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

停用自动备份

如需为实例停用自动备份,请按如下所述操作:

控制台

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

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 从 SQL 导航菜单中选择备份
  4. 点击管理自动备份
  5. 清除自动备份
  6. 点击保存

gcloud

修改实例以停用备份:

gcloud sql instances patch INSTANCE_NAME \
--no-backup

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
    }
  }
}

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

您应该收到类似以下内容的 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 响应:

时间点恢复

详细了解时间点恢复

后续步骤