本页面介绍了如何将 Cloud SQL 实例备份到备份保险柜,备份保险柜提供不可变性和强制保留功能。
在 Google Cloud 控制台中,您可以通过应用备份方案将 Cloud SQL 实例备份到 备份保险柜。您可以通过以下两种方式之一备份实例,这两种方式都会将备份安全地存储在备份保险柜中,以便在发生数据丢失或其他意外事件时提供可靠的恢复:
预定备份:按特定时间间隔(例如每天、每周、每月或每年)自动备份 Cloud SQL 实例 。
按需备份:在需要时创建按需备份。 按需备份非常适合在对数据库进行重大更改之前创建备份,或用于临时数据保护。
准备工作
在 Cloud SQL 实例所在的位置启用 Backup and DR Service API。
在存储桶上设置 Observability Analytics 以监控 Backup and DR 备份作业。
对于启用了 CMEK 的实例:如果源 Cloud SQL 实例受客户管理的加密密钥 (CMEK) 保护,您必须向 Backup and DR Service 服务代理授予
roles/cloudkms.cryptoKeyEncrypterDecrypterIdentity and Access Management 角色。源 Cloud SQL 实例使用的 Cloud Key Management Service 密钥需要此权限。Backup and DR Service 服务代理位于 备份保险柜所在的项目中。在尝试保护启用了 CMEK 的 Cloud SQL 实例之前,请向服务帐号授予此角色 。
备份用户的 IAM 角色和权限
如需获得配置预定备份或运行按需备份所需的权限,请让您的管理员向您授予备份保险柜项目的以下 IAM 角色:
- Backup and DR Backup User (
roles/backupdr.backupUser) - Viewer (
roles/viewer)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色包含 配置预定备份或运行按需备份所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
配置预定备份或运行按需备份需要以下权限:
-
backupdr.backupPlans.list -
backupdr.backupPlanAssociations.createForCloudSqlInstance -
backupdr.backupPlanAssociations.fetchForCloudSqlInstance -
backupdr.backupPlanAssociations.list -
backupdr.backupPlanAssociations.getForCloudSqlInstance -
backupdr.backupPlanAssociations.triggerBackupForCloudSqlInstance -
backupdr.backupPlanAssociations.deleteForCloudSqlInstance -
backupdr.backupPlans.useForCloudSqlInstance -
backupdr.locations.list -
backupdr.operations.get -
cloudasset.assets.searchAllResources
每次 API 调用所需的动态权限
下表列出了每次 API 调用所需的动态权限:
| 资源 | 要对资源执行的操作 | 每次 API 调用所需的权限 | 需要分配权限的项目 |
|---|---|---|---|
| 备份保险柜 | 创建 BackupVault | backupdr.backupVaults.create |
管理员项目 |
| 删除 BackupVault | backupdr.backupVaults.delete |
管理员项目 | |
| 更新 BackupVault | backupdr.backupVaults.update |
管理员项目 | |
| 列出 BackupVault | backupdr.backupVaults.list |
管理员项目 | |
| 获取 BackupVault | backupdr.backupVaults.get |
管理员项目 | |
| 备份方案 | 创建 BackupPlan | backupdr.backupPlans.create |
管理员项目 |
| 删除 BackupPlan | backupdr.backupPlans.delete |
管理员项目 | |
| 获取 BackupPlan | backupdr.backupPlans.get |
管理员项目 | |
| 列出备份方案 | backupdr.backupPlans.list |
管理员项目 | |
| 备份方案关联 | 创建备份方案关联 | cloudsql.instances.updateBackupDrConfigbackupdr.backupPlanAssociations.createForCloudSqlInstancebackupdr.backupPlans.useForCloudSqlInstance |
工作负载项目 工作负载项目 管理员项目 |
| 删除备份方案关联 | backupdr.backupPlanAssociations.deleteForCloudSqlInstancecloudsql.instances.updateBackupDrConfig |
工作负载项目 工作负载项目 |
|
| 在备份方案关联中触发按需备份 | backupdr.backupPlanAssociations.triggerBackupForCloudSqlInstance |
工作负载项目 | |
| 获取备份方案关联 | backupdr.backupPlanAssociations.getForCloudSqlInstance |
工作负载项目 | |
| 列出备份方案关联 | backupdr.backupPlanAssociations.list |
工作负载项目 | |
| 提取备份方案关联 | backupdr.backupPlanAssociations.fetchForCloudSqlInstance |
工作负载项目 | |
| 数据源 | 获取 DataSource | backupdr.bvdataSources.get |
管理员项目 |
| 列出 DataSource | backupdr.backupPlanAssociations.list |
管理员项目 | |
| 时间点恢复 | backupdr.bvdataSources.useReadOnlyForCloudSqlInstance |
管理员项目 | |
| 备份 | 获取备份 | backupdr.bvbackups.get |
管理员项目 |
| 列出备份 | backupdr.bvbackups.list |
管理员项目 | |
| 提取备份 | backupdr.bvbackups.fetchForCloudSqlInstance |
管理员项目 | |
| 删除备份 | backupdr.bvbackups.delete |
管理员项目 | |
| 恢复备份 | backupdr.bvbackups.useReadOnlyForCloudSqlInstance |
管理员项目 | |
| 数据源引用 | 获取 DataSource 引用 | backupdr.dataSourceReferences.getForCloudSqlInstance |
工作负载项目 |
| 列出 DataSource 引用 | backupdr.dataSourceReferences.list |
工作负载项目 | |
| 提取 DataSource 引用 | backupdr.dataSourceReferences.fetchForCloudSqlInstance |
工作负载项目 | |
| 运维 | 列出运维 | backupdr.operations.list |
相应项目 |
| 获取运维 | backupdr.operations.get |
相应项目 |
在 Cloud SQL 项目中授予备份保险柜访问权限
如需在与创建备份保险柜的项目不同的项目中备份 Cloud SQL 实例,您必须在 Cloud SQL 项目中向备份保险柜服务代理授予 Backup and DR Cloud SQL Operator (roles/backupdr.cloudSqlOperator) IAM 角色。如果存储备份的备份保险柜项目与 Cloud SQL 项目不同,请在 Cloud SQL 项目中向备份保险柜服务代理分配该角色。
如需在创建备份保险柜的同一项目中备份 Cloud SQL 实例,则无需授予任何角色。
如需了解如何在您打算备份的项目中向备份保险柜服务代理授予角色 ,请参阅向服务代理授予角色。
配置预定备份
按照以下说明为 Cloud SQL 实例配置预定备份。
控制台
在 Google Cloud 控制台中,前往 受保管的备份 页面。
点击安排备份 。
从资源类型 列表中,选择 Cloud SQL 。
从项目 列表中,选择 Cloud SQL 实例所在的项目。
从区域 列表中,选择实例所在的区域。
在资源 列表中,点击浏览 。选择要备份的 Cloud SQL 实例,然后点击完成 。
点击继续 。
在备份方案 列表中,点击选择 。
选择要用于保护 Cloud SQL 实例的备份方案。
点击完成 。
查看备份详细信息,然后点击安排 。
gcloud
创建备份方案和 Cloud SQL 实例。
配置预定备份。
gcloud backup-dr backup-plan-associations create BACKUP_PLAN_ASSOCIATION_NAME \ --location=CSQL_REGION \ --project=CSQL_PROJECT_ID \ --resource=projects/CSQL_PROJECT_ID/instances/CSQL_INSTANCE_ID \ --resource-type=sqladmin.googleapis.com/Instance \ --backup-plan=projects/PROJECT_ID/locations/LOCATION/backupPlans/BACKUP_PLAN替换以下内容:
BACKUP_PLAN_ASSOCIATION_NAME:备份方案关联的名称。CSQL_REGION:Cloud SQL 实例所在的区域。CSQL_PROJECT_ID:Cloud SQL 实例所在项目的名称。CSQL_INSTANCE_ID:Cloud SQL 实例 ID。PROJECT_ID:备份方案所在项目的名称。LOCATION:实例的位置。BACKUP_PLAN:备份方案的名称。
Terraform
您可以使用 Terraform 资源配置预定备份。
列出已安排备份的实例
按照以下说明列出已安排备份的 Cloud SQL 实例。
控制台
在 Google Cloud 控制台中,前往 受保管的备份 页面。
在表格顶部,选择过滤表格 ,然后点击资源类型 。选择 Cloud SQL 。这会将显示内容限制为仅显示已应用备份方案且备份已存储在项目中的备份保险柜内的 Cloud SQL 实例。
gcloud
列出已安排备份的 Cloud SQL 实例:
gcloud alpha backup-dr backup-plan-associations fetch-for-resource-type sqladmin.googleapis.com/Instance \
--location=LOCATION \
--project=PROJECT_ID
替换以下内容:
LOCATION:预定备份的位置。
PROJECT_ID:Cloud SQL 实例所在项目的名称。
创建按需备份
您可以触发所选备份规则立即运行,从而为具有备份方案的 Cloud SQL 实例启动按需备份。 按需备份通常仅捕获自上次备份以来更改的数据(增量)。
创建按需备份时,您可以从与 Cloud SQL 实例关联的备份方案中选择一条规则。此规则决定了按需备份的删除时间。您可以从作业 页面查看备份作业状态。如需了解详情,请参阅 在控制台中监控备份和恢复作业 Google Cloud 。
按照以下说明创建按需备份。
控制台
在 Google Cloud 控制台中,前往 受保管的备份 页面。
受保管的备份 页面仅列出已应用备份方案且备份已存储在项目中的备份保险柜内的数据资源。
选择要备份的资源。从 菜单或资源的详情页面中,选择 创建按需备份。
在创建按需备份 窗口中,选择要使用的备份规则,然后点击创建 。
如需查看按需备份作业的状态,请点击通知 。
gcloud
创建按需备份。使用现有的备份方案关联启动按需备份。指定规则 ID 以确定此单个按需备份的到期期限:
gcloud backup-dr backup-plan-associations trigger-backup BACKUP_PLAN_ASSOCIATION_NAME \ --backup-rule-id=RULE_ID \ --project=PROJECT_ID \ --location=LOCATION \ [--no-async]替换以下内容:
BACKUP_PLAN_ASSOCIATION_NAME:备份方案关联的名称。
RULE_ID:您要 关联以运行按需备份的备份规则名称。
PROJECT_ID:项目的名称。
LOCATION:预定备份的位置。
移除 Cloud SQL 实例的保护
您可以通过移除应用于 Cloud SQL 实例的备份方案来移除对该实例的保护。从 Cloud SQL 实例中移除备份方案不会删除在使用备份方案时创建的任何备份。 您仍然可以访问和管理这些现有备份,直到它们过期。
按照以下说明移除 Cloud SQL 实例的保护:
控制台
在 Google Cloud 控制台中,前往 受保管的备份 页面。
点击要从中移除备份方案的数据库的名称。
选择移除备份方案 。
gcloud
取消对 Cloud SQL 实例的保护。
gcloud backup-dr backup-plan-associations delete BACKUP_PLAN_ASSOCIATION_NAME \
--project=PROJECT_ID \
--location=LOCATION
替换以下内容:
BACKUP_PLAN_ASSOCIATION_NAME:要删除的备份 方案关联的名称。
PROJECT_ID:项目的名称。
LOCATION:预定备份的位置。
限制
对于使用 CMEK 加密的 Cloud SQL 实例,Backup and DR Service 会主动验证权限。如果备份保险柜项目的 Backup and DR Service 服务代理在源实例的 KMS 密钥上没有必要的 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色,则备份方案关联 (BPA) 创建会失败。在关联备份方案之前,请确保所需的 IAM 权限已就位。