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

本页面介绍如何安排和停用自动备份、创建和管理按需备份,以及查看 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"
    }
  }
  deletion_protection =  "true"
}

应用更改

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

  1. 启动 Cloud Shell
  2. 设置要应用 Terraform 配置的 Google Cloud 项目:
        export GOOGLE_CLOUD_PROJECT=PROJECT_ID
        
  3. 创建一个目录,并在该目录中打开一个新文件。文件名必须具有 .tf 扩展名,例如 main.tf
        mkdir DIRECTORY && cd DIRECTORY && nano main.tf
        
  4. 将示例复制到 main.tf
  5. 查看和修改要应用到您的环境的示例参数。
  6. 依次按 Ctrl-xy 保存更改。
  7. 初始化 Terraform:
    terraform init
  8. 查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
    terraform plan

    根据需要更正配置。

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

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

  10. 打开您的 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:项目 ID
  • instance-id:实例 ID(主实例或副本实例)
  • start-time:采用“HH:MM”格式表示的时间

HTTP 方法和网址:

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

请求 JSON 正文:

{
  "settings":
  {
    "backupConfiguration":
    {
      "startTime": "start-time",
      "enabled": true,
      "binaryLogEnabled": true
    }
  }
}

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

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

REST v1beta4

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

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

  • project-id:项目 ID
  • instance-id:实例 ID
  • start-time:采用“HH:MM”格式表示的时间

HTTP 方法和网址:

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

请求 JSON 正文:

{
  "settings":
  {
    "backupConfiguration":
    {
      "startTime": "start-time",
      "enabled": true,
      "pointInTimeRecoveryEnabled": true
    }
  }
}

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

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

为备份设置自定义位置

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

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

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

控制台

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

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 点击修改
  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"
    }
  }
  deletion_protection =  "true"
}

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

查看备份列表

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

控制台不会在备份历史记录中显示被跳过或失败的备份。如需查看被跳过的备份,请使用 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/v1beta4/projects/project-id/instances/-/backupRuns

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

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

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

REST v1beta4

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

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

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

    HTTP 方法和网址:

    GET https://sqladmin.googleapis.com/v2/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 存储备份的位置。

设置自动备份保留

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

控制台

  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"
      }
    }
  }
  deletion_protection =  "true"
}

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

时间点恢复

详细了解时间点恢复

后续步骤