Spanner Omni バックアップ

Spanner Omni では、データベースのフル バックアップをオンデマンドで作成することも、バックアップ スケジュールを使用して作成することもできます。バックアップには、データベースのデータ全体が保存されます。オペレーター エラーやアプリケーション エラーが原因で論理データが破損した場合は、バックアップを復元できます。

Spanner Omni バックアップの概要

バックアップは可用性が高く、作成後最長 1 年間保持できます。各バックアップには createTime と versionTime が関連付けられています。createTime は、Spanner Omni がバックアップの作成を開始したタイムスタンプです。versionTime は、バックアップがデータベースの内容をキャプチャしたときのタイムスタンプです。バックアップには、versionTime 時点でのデータベースの一貫性のあるビューが含まれています。

オンデマンド バックアップの場合、createTime と versionTime はデフォルトで同じです。必要に応じて、オンデマンド バックアップの作成時に、データベースのバージョン保持期間内にある古い versionTime を指定できます。

スケジュール設定されたバックアップの場合、versionTime はバックアップ スケジュールの作成時に選択した時間です。Spanner Omni は versionTime から 4 時間以内にバックアップの作成を開始するため、createTime はこの 4 時間の期間内に収まります。これは、Spanner Omni がリクエストを受信したときにバックアップの作成を開始するオンデマンド バックアップとは異なります。

たとえば、頻度が 0 7 * * * UTC(毎日午前 7 時(UTC))のバックアップ スケジュールを作成するとします。つまり、バックアップごとに、versionTime は UTC 午前 7 時、createTime は UTC 午前 7 時から午前 11 時までの 4 時間の期間内のタイムスタンプになります。

Spanner Omni のバックアップは、Spanner Omni のデプロイにのみ復元できます。マネージド Spanner バックアップを Spanner Omni に復元したり、Spanner Omni バックアップをマネージド Spanner に復元することはできません。Spanner と Spanner Omni の間でデータを転送するには、変更ストリームを使用するか、Avro ファイルをエクスポートしてインポートします。詳細については、Spanner から Spanner Omni にデータを複製するとデータのインポートとエクスポートをご覧ください。

主な機能

Spanner Omni バックアップは、データの整合性、復元力のある外部レプリケーション、自動有効期限を提供します。

  • データの整合性: Spanner Omni データベースのバックアップは、バックアップの versionTime でトランザクションと外部整合性を備えています。

  • レプリケーション: バックアップ ファイルは、Spanner Omni デプロイの外部にある外部ストレージ システムに保存されます。

  • 自動有効期限: すべてのバックアップには、バックアップが削除される日を定める、ユーザー指定の有効期限があります。期限切れのバックアップは、Spanner Omni により非同期に削除されます。そのため、バックアップの期限が切れてから実際に削除されるまでには、時間差が生じることがあります。

外部ストレージ

外部ストレージは、Spanner Omni デプロイの外部にあるリモート ストレージを表します。Amazon Simple Storage Service(Amazon S3)、Cloud Storage、または Amazon S3 互換ストレージを外部ストレージとして構成できます。Spanner Omni は、この外部ストレージにバックアップ ファイルを保存します。

外部ストレージの管理

バックアップのストレージ ロケーションを作成、削除、一覧表示して、外部ストレージを管理します。

外部ストレージを作成する

Amazon S3 外部ストレージを作成するには、次のコマンドを実行します。

spanner external-storages create EXTERNAL_STORAGE_ID \
  --s3-bucket-name=BUCKET_NAME \
  --s3-region=AWS_REGION \
  --s3-assume-role-arn=ASSUME_ROLE_ARN

Cloud Storage 外部ストレージを作成する

Cloud Storage 外部ストレージを構成する前に、次のアイテムがあることを確認してください。

  • Google Cloud プロジェクトのターゲット Cloud Storage バケット。
  • ターゲット バケットに対する Storage オブジェクト管理者(roles/storage.objectAdmin)の Identity and Access Management(IAM)ロールが付与された Google Cloud サービス アカウント。詳細については、Cloud Storage に対する IAM ロールをご覧ください。
  • Spanner Omni 環境で構成された認証情報(サービス アカウント キー ファイルや Workload Identity 連携を介して交換された認証情報など)。外部環境からの認証の詳細については、AWS VM との Workload Identity 連携を構成すると Kubernetes との Workload Identity 連携を構成するをご覧ください。

Cloud Storage バケットを外部ストレージとして登録するには、次のコマンドを実行します。

spanner external-storages create EXTERNAL_STORAGE_ID \
  --gcs-bucket-name=BUCKET_NAME

次のように置き換えます。

  • EXTERNAL_STORAGE_ID: 外部ストレージ構成の固有識別子(例: gcp-gcs-backup-target)。
  • BUCKET_NAME: ターゲット Cloud Storage バケットの名前。

Amazon S3 互換の外部ストレージを作成する

Amazon S3 互換の外部ストレージを作成するには、次のコマンドを実行します。

spanner external-storages create EXTERNAL_STORAGE_ID \
    --s3-compatible-bucket-name=BUCKET_NAME \
    --s3-compatible-endpoint=ENDPOINT \
    --s3-compatible-credential-file-path=FILE

外部ストレージを削除する

外部ストレージを削除するには、まず、既存のバックアップまたは進行中のバックアップがないことを確認します。次のコマンドを実行します。

spanner external-storages delete EXTERNAL_STORAGE_ID

外部ストレージについて説明する

外部ストレージに関する情報を取得するには、次のコマンドを実行します。

spanner external-storages describe EXTERNAL_STORAGE_ID

外部ストレージを一覧表示する

外部ストレージのリストを取得するには、次のコマンドを実行します。

spanner external-storages list

バックアップ記述子

バックアップ記述子は、外部ストレージに保存されている完了したバックアップのメタデータとバックアップ ファイルパスを表します。

spanner external-storages backup-descriptors list EXTERNAL_STORAGE_ID

バックアップ情報

バックアップを作成すると、バックアップ メタデータは Spanner Omni に保存され、バックアップ ファイルは外部ストレージに保存されます。

バックアップには、バックアップの versionTime にあるデータベースの次の情報が含まれます。

  • フル バックアップにはすべてのデータが含まれます。

  • スキーマ情報(テーブル名、フィールド、データタイプ、セカンダリ インデックス、変更ストリーム、これらのエンティティ間の関係など)。

  • ALTER DATABASE SET OPTIONS コマンドで設定されたすべてのデータベース オプション。

Spanner Omni バックアップには、次の情報が含まれません。

  • versionTime より後に行われたデータやスキーマの変更。

  • インスタンスを記録します

  • 変更ストリーム データレコード。変更ストリーム スキーマは保存されますが、変更ストリーム データは、それが説明する変更とほぼ同時にストリーミングされ、使用されます。

バックアップの外部整合性を確保するために、Spanner Omni によって、データベースのコンテンツが versionTime に固定されます。これにより、バックアップ オペレーションの実行中は、ガベージ コレクション システムによって関連するデータ値が削除されることが回避されます。

バックアップ管理

バックアップを作成するには、次の権限が必要です。デプロイに対する次の IAM ロールを付与するよう管理者に依頼します。

アクション IAM ロール
バックアップを作成、表示、更新、削除する roles/spanner.backupAdmin
バックアップを作成して表示する roles/spanner.backupWriter

バックアップを作成

オンデマンド バックアップを作成する。

spanner backups create BACKUP_NAME \
--database=DATABASE_ID \
--retention-period=RETENTION_PERIOD \
--async

バックアップを削除

バックアップのメタデータとファイルを削除します。

spanner backups delete BACKUP_NAME

バックアップを記述する

バックアップに関する情報を取得します。

spanner backups describe BACKUP_NAME

バックアップを一覧表示する

デプロイ内の既存の Spanner Omni バックアップを一覧表示します。

spanner backups list

バックアップの有効期限を更新する

バックアップの有効期限を更新します。

spanner backups update-metadata BACKUP_NAME \
--expiration-date=EXPIRATION_DATE

バックアップをインポートする

別の Spanner Omni デプロイでデータベースを復元する場合(Spanner Omni デプロイ間で復元する場合や、元のデプロイを削除する場合など)、バックアップ ファイルが外部ストレージに残っていれば、バックアップをインポートできます。

  1. 元のデプロイと同じ Amazon S3 または Cloud Storage バケットを使用する新しいデプロイに外部ストレージを作成します。次に例を示します。

    spanner external-storages create EXTERNAL_STORAGE_ID \
      --gcs-bucket-name=BUCKET_NAME
    
  2. 外部ストレージ内のバックアップ記述子を一覧表示します。

    spanner external-storages backup-descriptors list EXTERNAL_STORAGE_ID
    
  3. バックアップ メタデータを新しいデプロイにインポートします。

    spanner backups import BACKUP_NAME \
      --external-storage=EXTERNAL_STORAGE_ID \
      --backup-descriptor=BACKUP_DESCRIPTOR \
      --retention-period=RETENTION_PERIOD
    

    次のように置き換えます。

    • BACKUP_NAME: インポートされたバックアップの名前。
    • EXTERNAL_STORAGE_ID: 外部ストレージ構成の ID。
    • BACKUP_DESCRIPTOR: 前の手順で返された記述子 ID。
    • RETENTION_PERIOD: バックアップを保持する期間(例: 24h、30d)。

バックアップ メタデータをインポートしたら、デプロイメント内の新しいデータベースにバックアップを復元できます。詳細については、Spanner Omni バックアップを復元するをご覧ください。

バックアップ スケジュール

Spanner Omni では、データベースのフル バックアップをスケジュールできます。Spanner Omni がバックアップを作成する頻度をスケジュールで指定できます。

フル バックアップ スケジュールでは、12 時間以上ごとにバックアップが作成されます。バックアップは、スケジュールされた時刻から 30 分以内に開始されます。データベースごとに最大 4 つのバックアップ スケジュールを設定できます。

バックアップ スケジュールの管理

バックアップ スケジュールを作成して管理するには、次の権限が必要です。デプロイに対する次の IAM ロールを付与するよう管理者に依頼します。

  • バックアップ スケジュールの作成、表示、更新、削除: roles/spanner.backupAdmin

  • バックアップ スケジュールの作成、表示: roles/spanner.backupWriter

バックアップ スケジュールを作成する

Spanner Omni データベースの新しいバックアップ スケジュールを作成します。

spanner backup-schedules create SCHEDULE_ID \
  --database=DATABASE_ID \
  --retention-duration=RETENTION_DURATION \
  --cron="CRONTAB_EXPRESSION"

バックアップ スケジュールを取得する

特定のバックアップ スケジュールに関する情報を取得する。

spanner backup-schedules describe SCHEDULE_ID --database=DATABASE_ID

バックアップ スケジュールを一覧表示する

特定のデータベースのすべてのバックアップ スケジュールを一覧表示します。

spanner backup-schedules list --database=DATABASE_ID

バックアップ スケジュールを更新する

既存のバックアップ スケジュールのプロパティを更新します。

spanner backup-schedules update SCHEDULE_ID \
  --database=DATABASE_ID \
  --retention-duration=RETENTION_DURATION \
  --cron="CRONTAB_EXPRESSION"

バックアップ スケジュールを削除する

データベースからバックアップ スケジュールを削除します。

spanner backup-schedules delete SCHEDULE_ID --database=DATABASE_ID

IAM アクセス制御ポリシーを設定する

バックアップ スケジュールの IAM アクセス制御ポリシーを設定します。

spanner backup-schedules set-iam-policy SCHEDULE_ID \
  --database=DATABASE_ID \
  policy.json

IAM アクセス制御ポリシーを取得する

バックアップ スケジュールの IAM アクセス制御ポリシーを取得します。

spanner backup-schedules get-iam-policy SCHEDULE_ID --database=DATABASE_ID

バックアップ ストレージとデータベース ストレージの比較

バックアップのストレージ サイズは、作成時のソース データベースのストレージ サイズよりも小さくなることも、大きくなることもあります。

バックアップにはデータの 1 つのバージョンのみが含まれますが、ライブ データベースには進行中のオペレーションによりデータの複数のバージョンが含まれる可能性があるため、バックアップのストレージはデータベースのストレージよりも小さくすることができます。データ形式や圧縮率の違いによって、バックアップ サイズが小さくなることもあります。

逆に、データベースの状態やバックアップを作成した時間によっては、バックアップのストレージがデータベースのストレージよりも大きくなることがあります。

同様の理由で、バックアップからデータベースを復元する場合、そのストレージがデータベースのストレージよりも大きくなることがあります。これは、バックアップの作成後に大量のデータが削除され、圧縮された場合に発生することがあります。したがって、バックアップのサイズは、バックアップが作成された時点と、その後のデータベースに対するオペレーションによって異なります。

ライブ データベースに対するバックアップのサイズを予測する数式はありません。書き込み率の高いデータベース(ホット データベース)の場合、バックアップはライブ データベースよりも小さくなる可能性があります。ただし、場合によってはバックアップ サイズが大きくなることがあります。

次のステップ