gcloud CLI を使用してデータベースのバックアップと復元を行う

このページでは、Google Cloud CLI で Spanner のバックアップと復元を使用する方法について説明します。

前提条件

このページの例では、次のことを前提としています。

  • Spanner で使用する gcloud CLI をすでに設定している。Spanner で Google Cloud CLI を初めて使用する場合は、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 が使用されています。バックアップ コピー オペレーションの一部として新しいプロジェクトを作成することはできません。
  • バックアップの有効期限は、現在のコピー リクエストが処理されてから 6 時間以上後、かつソース バックアップ 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 を使用して、オペレーションの進行状況を確認します。

  1. オペレーション 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 をご覧ください。バックアップ オペレーションのフィルタリングについては、ListBackupOperationsRequestfilter フィールドをご覧ください。

    • --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
      ```
    
  2. 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 をご覧ください。バックアップのフィルタリングについては、ListBackupsRequestfilter フィールドをご覧ください。

このコマンドの詳細については、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 をご覧ください。