本页面介绍如何将 Spanner 备份和恢复与 Google Cloud CLI 搭配使用。
前提条件
本页中的示例进行如下假设:
您已经设置 gcloud CLI 以便与 Spanner 搭配使用。如果您刚开始将 Google Cloud CLI 与 Spanner 搭配使用,请参阅通过 Google Cloud CLI 开始使用 Spanner。
您已使用默认项目配置 Google Cloud CLI。例如:
gcloud config set core/project my-project
您有一个名为
test-instance
的实例和一个名为example-db
的数据库。
创建备份
如需创建名为 example-db-backup-6
的备份并让其在 1 年后过期,请使用 gcloud spanner backups create
:
gcloud spanner backups create example-db-backup-6 --instance=test-instance \
--database=example-db --retention-period=1y --async
以下是一些使用说明:
- 如需设置备份的到期日期,请指定
--retention-period
或--expiration-date
标志。如需了解日期语法,请参阅 gcloud topic DateTimes。 - 备份的名称在实例中必须是唯一的。
- 由于
--async
标志,该命令会立即返回。如果没有此标记,该命令将等待备份操作完成。 请指定
--help
标志以获取有关任何命令的帮助。输出类似于以下内容:
Create request issued for: [example-db-backup-6] Check operation [projects/my-project/instances/test-instance/backups/example-db-backup-6/operations/_auto_op_234567] for status.
如需检查备份操作的进度,请参阅检查操作进度。
复制备份
如需将备份复制到同一项目中的其他实例,请执行以下操作:
gcloud spanner backups copy \
--source-instance=test-instance \
--source-backup=example-db \
--destination-instance=backup-instance \
--destination-backup=copied-backup \
--expiration-date=2022-03-30T10:49:41Z
如需将备份复制到其他项目中的其他实例,请执行以下操作:
gcloud spanner backups copy \
--source-backup=projects/my-project/instances/test-instance/backups/example-db \
--destination-backup=projects/backup-project/instances/backup-instance-eu/backups/copied-backup \
--expiration-date=2022-03-30T10:49:41Z
使用说明:
- 如果您选择将备份复制到同一项目中的其他实例,则必须为复制的备份创建一个新实例(或准备一个实例)。在前面的示例中,使用了
backup-instance
。您无法在备份复制操作过程中创建新实例。 - 如果您选择将备份复制到其他项目,则必须将另一个项目拥有自己的实例,以便用于复制的备份。在前面的示例中使用的是
backup-project
。您无法在备份复制操作中创建新项目。 - 备份的到期时间必须至少为处理当前复制请求后的六个小时,最迟为源备份
create_time
后的 366 天。
输出类似于以下内容:
createTime: '2022-03-29T22:06:05.905823Z'
database: projects/my-project/instances/test-instance/databases/example-db
databaseDialect: GOOGLE_STANDARD_SQL
encryptionInfo:
encryptionType: GOOGLE_DEFAULT_ENCRYPTION
expireTime: '2022-03-30T10:49:41Z'
maxExpireTime: '2023-03-17T20:46:33.479336Z'
name: projects/backup-project/instances/backup-instance-eu/backups/copied-backup
sizeBytes: '7957667'
state: READY
versionTime: '2022-03-16T20:46:33.479336Z'
如需检查复制操作的进度,请参阅检查操作进度。
从备份中恢复数据库
如需恢复数据库,请使用 gcloud spanner databases restore
:
gcloud spanner databases restore --async \
--destination-instance=test-instance --destination-database=example-db-restored \
--source-instance=test-instance --source-backup=example-db-backup-6
使用说明:
- 由于
--async
标志,该命令会立即返回。如果没有此标志,该命令将等待恢复操作完成。 - 如果来源实例和目标实例不同,则它们必须具有相同的实例配置。
- 如果目标数据库已存在,则操作将失败。
输出类似于以下内容:
Restore database in progress. Operation name=projects/my-project/instances/test-instance/databases/example-db-restored-1/operations/_auto_op_bb8e360b256b04bf
如需跟踪恢复操作的进度,请参阅检查操作进度。
查看操作进度
使用 gcloud spanner operations describe
检查操作的进度。
获取操作 ID:
gcloud spanner operations list --instance=INSTANCE-NAME \ --database=DATABASE-NAME --type=BACKUP
替换以下内容:
- 将 INSTANCE-NAME 替换为 Spanner 实例名称。
- 将 DATABASE-NAME 替换为数据库的名称。
使用说明:
要限制列表,请指定
--filter
标志。例如:--filter="metadata.name:example-db"
仅列出对特定数据库的操作。--filter="error:*"
仅列出失败的备份操作。
如需了解过滤条件语法,请参阅 gcloud topic filters。如需了解如何过滤备份操作,请参阅 ListBackupOperationsRequest 中的
filter
字段。--type
标志不区分大小写。
输出类似于以下内容:
OPERATION_ID DONE @TYPE BACKUP SOURCE_DATABASE START_TIME END_TIME _auto_op_123456 True CreateBackupMetadata example-db-backup-7 example-db 2020-02-04T02:12:38.075515Z 2020-02-04T02:22:40.581170Z _auto_op_234567 True CreateBackupMetadata example-db-backup-6 example-db 2020-02-04T02:05:43.920377Z 2020-02-04T02:07:59.089820Z ```
运行
gcloud spanner operations describe
:gcloud spanner operations describe OPERATION-ID \ --instance=INSTANCE-NAME \ --backup=BACKUP-NAME \
替换以下内容:
- OPERATION-ID:您要检查的操作的操作 ID。
- INSTANCE-NAME:Spanner 实例名称。
- BACKUP-NAME:Spanner 备份名称。
输出中的
progress
部分显示操作完成百分比。输出类似于以下内容:done: true metadata: ... progress: - endTime: '2022-03-01T00:28:06.691403Z' progressPercent: 100 startTime: '2022-03-01T00:28:04.221401Z' - endTime: '2022-03-01T00:28:17.624588Z' startTime: '2022-03-01T00:28:06.691403Z' progressPercent: 100 ...
如果操作花费的时间过长,您可以取消操作。如需了解详情,请参阅取消长时间运行的备份操作。
获取备份信息
要获取备份的相关信息,请使用:
gcloud spanner backups describe example-db-backup-6 --instance=test-instance
输出类似于以下内容:
createTime: '2020-02-04T02:05:43.920377Z'
database: projects/my-project/instances/test-instance/databases/example-db
expireTime: '2021-02-04T02:05:43.268327Z'
name: projects/my-project/instances/test-instance/backups/example-db-backup-6
sizeBytes: '1000000000'
state: READY
如需详细了解此命令,请参阅 gcloud spanner backups describe
。
列出备份
要列出实例中的所有备份,请使用:
gcloud spanner backups list --instance=test-instance
输出类似于以下内容:
BACKUP SOURCE_DATABASE CREATION_TIME EXPIRATION_TIME STATE BACKUP_SIZE_IN_BYTES IN_USE_BY
example-db-backup-6 example-db 2020-02-04T02:05:43.920377Z 2021-02-04T02:05:43.268327Z CREATING
example-db-backup-4 example-db 2020-02-04T01:21:20.873839Z 2021-02-04T01:21:20.530151Z READY 32
example-db-backup-3 example-db 2020-02-03T23:59:18.936433Z 2021-02-03T23:59:18.203083Z READY 32
example-db-backup-5 example-db 2020-02-03T23:48:06.259296Z 2021-02-03T23:48:05.830937Z READY 32
example-db-backup-2 example-db 2020-01-30T19:49:00.616338Z 2021-01-30T19:49:00.283917Z READY 32
example-db-backup-1 example-db 2020-01-30T19:47:09.492551Z 2021-01-30T19:47:09.097804Z READY 32
要限制列表,请指定 --filter
标志。例如,--filter="state:creating"
仅列出仍在创建中的备份。
如需了解过滤条件语法,请参阅 gcloud topic filters。如需了解如何过滤备份,请参阅 ListBackupsRequest 中的 filter
字段。
如需详细了解此命令,请参阅 gcloud spanner backups list
。
更新备份元数据
要更新备份的到期日期,请执行以下操作:
gcloud spanner backups update-metadata example-db-backup-6 \
--instance=test-instance --expiration-date=2020-05-05T00:00:00Z
输出类似于以下内容:
createTime: '2020-02-04T02:05:43.920377Z'
database: projects/my-project/instances/test-instance/databases/example-db
expireTime: '2020-05-05T00:00:00Z'
name: projects/my-project/instances/test-instance/backups/example-db-backup-6
sizeBytes: '1000000000'
state: READY
如需详细了解此命令,请参阅 gcloud spanner backups update-metadata
。
删除备份
要删除备份,请使用:
gcloud spanner backups delete example-db-backup-1 --instance=test-instance
您必须确认操作:
You are about to delete backup [example-db-backup-1]
Do you want to continue (Y/n)? Y
Deleted backup [example-db-backup-1].
如需详细了解此命令,请参阅 gcloud spanner backups delete
。