Spanner Omni バックアップ

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

Spanner Omni バックアップの概要

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

オンデマンド バックアップの場合、createTimeversionTime はデフォルトで同じです。必要に応じて、オンデマンド バックアップの作成時に、データベースのバージョン保持期間内にある古い 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 データベースのバックアップは、バックアップの 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 外部ストレージを作成するには、次のコマンドを実行します。

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

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 より後に行われたデータやスキーマの変更。

  • Identity and Access Management(IAM)ポリシー。

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

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

バックアップ管理

バックアップを作成するには、次の権限が必要です。Deployment に対する次の 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

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

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

spanner backups list

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

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

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

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

Deployment を誤って削除した場合は、外部ストレージからバックアップ ファイルを削除していない場合に、バックアップをインポートできます。

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

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

    spanner external-storages backup-descriptors list EXTERNAL_STORAGE_ID
    
  3. バックアップ記述子を選択して、新しい Deployment にインポートします。

    spanner backups import BACKUP_NAME \
     --external-storage EXTERNAL_STORAGE_ID \
     --backup-descriptor BACKUP_DESCRIPTOR \
     --retention-period 24h
    

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

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

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

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

バックアップ スケジュールを作成して管理するには、次の権限が必要です。Deployment に対する次の 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 つのバージョンのみが含まれますが、ライブ データベースには進行中のオペレーションによりデータの複数のバージョンが含まれる可能性があるため、バックアップのストレージはデータベースのストレージよりも小さくすることができます。データ形式や圧縮率の違いによって、バックアップ サイズが小さくなることもあります。

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

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

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