インプレース復元オペレーションを実行する
このページでは、バックアップ内のデータを、バックアップのソース データベースと同じ名前のデータベースに復元する方法について説明します。 このページを読む前に、データのバックアップと復元について理解しておく必要があります。
インプレース復元
インプレース復元では、元のデータベースがまだ存在している間に、バックアップからバックアップを作成したソース データベースにデータベースを復元できます。インプレース復元を行うと、トラフィックの再ルーティングや、別の名前のデータベースの作成を回避できます。
復元オペレーションでは、まだ存在しない宛先データベースを使用する必要があります。ただし、インプレース復元をシミュレートするには、ソース データベースを削除してから、ソース データベースと同じ名前の新しいデータベースにバックアップから復元します。
インプレース復元を行う
インプレース復元を行う手順は以下のとおりです。
- 復元オペレーションに使用するバックアップを特定します。
- 既存のデータベースを削除します。
- 削除したデータベースのバックアップとデータベース ID を使用して、復元オペレーションを完了します。
始める前に
インプレース復元プロセスを開始する前に、次の手順を行うことをおすすめします。
削除するデータベースのデータをエクスポートします。
削除したデータベースを復元する必要がある場合は、エクスポート オペレーションからデータをimportします。 削除したデータベースを同じデータベース ID に復元するには、実行中の復元オペレーションがすべて完了するのを待ってから、次の操作を行います。
- データベース ID を持つ既存のデータベースを削除し、5 分以上待ちます。
- データベース ID を持つ新しいデータベースを作成する
- インポート オペレーションを開始する
データベースのインデックス構成を取得してコピーします。エクスポート オペレーションではインデックス定義をキャプチャしません。インプレース復元オペレーションの完了後に、インデックス構成を使用してインデックスを再作成します。次のコマンドを使用して、データベースのインデックス構成を取得します。
gcloud firestore indexes composite list
を使用して、複合インデックスのリストを取得します。gcloud firestore indexes composite list --database=DATABASE_ID
DATABASE_ID は、データベースの ID に置き換えます。
gcloud firestore indexes fields list
を使用して、単一フィールド(組み込み)インデックス除外のリストを取得します。gcloud firestore indexes fields list --database=DATABASE_ID
インプレース復元を行う
インプレース復元オペレーションを実行するには、次の手順を行います。このプロセスでは、データベースを削除する瞬間から復元オペレーションが完了するまでの間に、ダウンタイムが必要となります。
復元オペレーションの開始後は、そのオペレーションをキャンセルできず、オペレーションが完了するまで待つ必要があります。復元オペレーションは、オペレーションで使用されるデータベース ID を直ちに占有します。
gcloud alpha firestore backups list
コマンドを使用して、復元オペレーションに使用するバックアップを特定します。リソース名をメモしてください。リソース名には次の形式を使用します。projects/PROJECT_ID/locations/LOCATION/backups/BACKUP_ID
gcloud firestore databases delete
コマンドを使用して、既存のデータベースを削除します。gcloud firestore databases delete --database='DATABASE_ID'
DATABASE_ID をデータベース ID に置き換えます。
データベースを削除してから、データベース ID が再び使用可能になるまで、少なくとも 5 分間待ちます。
gcloud alpha firestore databases restore
コマンドを使用して、復元オペレーションを開始します。gcloud alpha firestore databases restore \ --source-backup=projects/PROJECT_ID/locations/LOCATION/backups/BACKUP_ID \ --destination-database='DATABASE_ID'
DATABASE_ID をデータベース ID に置き換えます。