gcloud を使用したデータベースのバックアップと復元

このページでは、gcloud コマンドライン インターフェースで Cloud Spanner のバックアップと復元を使用する方法について説明します。

要件

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

  • Cloud Spanner で使用する gcloud SDK が設定済みである。Cloud Spanner で gcloud を初めて使用する場合は、gcloud を使用した Cloud Spanner のスタートガイドをご覧ください。

  • gcloud がデフォルトのプロジェクトで構成されている。例:

    gcloud config set core/project my-project
    
  • test-instance という名前のインスタンスと example-db という名前のデータベースがあります。

バックアップの作成

example-db-backup-6 という名前のバックアップを作成し、有効期限を 1 年に設定するには、次の操作を行います。

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 create をご覧ください。

バックアップの進行状況の表示

  1. バックアップ オペレーションの進行状況を追跡するには、gcloud spanner operations describe を使用します。

    gcloud spanner operations describe _auto_op_234567 \
        --instance=test-instance --backup=example-db-backup-6
    

    出力は次のとおりです。

    done: true
    metadata:
      '@type': type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata
      database: projects/my-project/instances/test-instance/databases/example-db
      name: projects/my-project/instances/test-instance/backups/example-db-backup-6
      progress:
        endTime: '2020-02-04T02:07:59.089820Z'
        progressPercent: 100
        startTime: '2020-02-04T02:05:43.920377Z'
    name: projects/my-project/instances/test-instance/backups/example-db-backup-6/operations/_auto_op_234567
    response:
      '@type': type.googleapis.com/google.spanner.admin.database.v1.Backup
      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
    
  2. オペレーション名がわからない場合は、gcloud spanner operations list を利用して検索します。

    gcloud spanner operations list --instance=test-instance --type=BACKUP
    

    使用上の注意:

    • 表示内容を限定するには、--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
    

バックアップからのデータベースの復元

データベースを復元するには、次の操作を行います。

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 databases restore をご覧ください。

復元と最適化の進行状況の表示

  1. 復元オペレーションの進行状況を追跡するには、gcloud spanner operations describe を利用します。

    gcloud spanner operations describe  _auto_op_bb8e360b256b04bf \
        --instance=test-instance --database=example-db-restored
    

    出力は次のとおりです。

    done: true
    metadata:
      '@type': type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata
      backupInfo:
        backup: projects/my-project/instances/test-instance/backups/example-db-backup-6
        createTime: '2020-02-03T23:48:06.259296Z'
        sourceDatabase: projects/my-project/instances/test-instance/databases/example-db
      name: projects/my-project/instances/test-instance/databases/example-db-restored
      optimizeDatabaseOperationName: projects/my-project/instances/test-instance/databases/example-db-restored/operations/_auto_op_7702f3f19fa99616
      progress:
        endTime: '2020-02-04T02:40:56.424382Z'
        progressPercent: 100
        startTime: '2020-02-04T02:35:30.683330Z'
      sourceType: BACKUP
    name: projects/my-project/instances/test-instance/databases/example-db-restored/operations/_auto_op_91ff1f270832a22b
    response:
      '@type': type.googleapis.com/google.spanner.admin.database.v1.Database
      createTime: '2020-02-04T02:35:30.683330Z'
      name: projects/my-project/instances/test-instance/databases/example-db-restored
      restoreInfo:
        backupInfo:
          backup: projects/my-project/instances/test-instance/backups/example-db-backup-6
          createTime: '2020-02-03T23:48:06.259296Z'
          sourceDatabase: projects/my-project/instances/test-instance/databases/example-db
        sourceType: BACKUP
      state: READY_OPTIMIZING
    

    出力から、復元オペレーションが完了し、復元の仕組みで説明されているように READY_OPTIMIZING の状態になっていることが確認できます。また、最適化オペレーションの進行状況を追跡するために使用できる optimizeDatabaseOperationName も用意されています。

  2. 最適化オペレーションの進行状況を追跡するには、gcloud spanner operations describe を利用します。

    gcloud-testing spanner operations describe _auto_op_7702f3f19fa99616 \
        --instance=test-instance --database=example-db-restored
    

    出力は次のとおりです。

    done: true
    metadata:
      '@type': type.googleapis.com/google.spanner.admin.database.v1.OptimizeRestoredDatabaseMetadata
      name: projects/my-project/instances/test-instance/databases/example-db-restored
      progress:
        endTime: '2020-02-04T22:11:21.731739Z'
        progressPercent: 100
        startTime: '2020-02-04T22:10:48.308090Z'
    name: projects/my-project/instances/test-instance/databases/example-db-restored/operations/_auto_op_7702f3f19fa99616
    response:
      '@type': type.googleapis.com/google.spanner.admin.database.v1.Database
      createTime: '2020-02-04T22:03:34.282186Z'
      name: projects/my-project/instances/test-instance/databases/example-db-restored
      restoreInfo:
        backupInfo:
          backup: projects/my-project/instances/test-instance/backups/example-db-backup-6
          createTime: '2020-02-03T23:48:06.259296Z'
          sourceDatabase: projects/my-project/instances/test-instance/databases/example-db
        sourceType: BACKUP
      state: READY
    
  3. 復元または最適化のオペレーションの名前がない場合は、gcloud spanner operations list を利用して検索します。復元されたデータベースがバックアップと同じインスタンスにない場合は、instance フラグで宛先のインスタンスを指定してください。

    gcloud spanner operations list --instance=test-instance \
        --type=DATABASE_RESTORE
    

    出力は次のとおりです。

    OPERATION_ID               DONE  @TYPE                             RESTORED_DATABASE    SOURCE_BACKUP        START_TIME                   END_TIME
    _auto_op_7702f3f19fa99616  True  OptimizeRestoredDatabaseMetadata  example-db-restored                       2020-02-04T02:40:56.424382Z  2020-02-04T02:41:37.765157Z
    _auto_op_91ff1f270832a22b  True  RestoreDatabaseMetadata           example-db-restored  example-db-backup-6  2020-02-04T02:35:30.683330Z  2020-02-04T02:40:56.424382Z
    

バックアップ情報の取得

バックアップに関する情報を取得するには、次の操作を行います。

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 をご覧ください。