Menggunakan pemulihan point-in-time (PITR)

Halaman ini menjelaskan cara menggunakan pemulihan point-in-time (PITR) untuk mempertahankan dan memulihkan data di Firestore dengan kompatibilitas MongoDB.

Untuk memahami konsep PITR, lihat Pemulihan point-in-time.

Izin

Untuk mendapatkan izin yang diperlukan guna mengelola setelan PITR, minta administrator untuk memberi Anda peran IAM Cloud Datastore Owner (roles/datastore.owner) di project yang setelan PITR-nya ingin Anda aktifkan. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin yang diperlukan untuk mengelola setelan PITR. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk mengelola setelan PITR:

  • Untuk mengaktifkan PITR saat membuat database: datastore.databases.create
  • Untuk memperbarui setelan PITR di database yang ada: datastore.databases.update,datastore.databases.list
  • Untuk melakukan pembacaan dari data PITR: datastore.databases.get,datastore.entities.get,datastore.entities.list
  • Untuk mengekspor data PITR: datastore.databases.export
  • Untuk mengimpor data PITR: datastore.databases.import
  • Untuk meng-clone database: datastore.databases.clone

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Sebelum memulai

Perhatikan poin-poin berikut sebelum Anda mulai menggunakan PITR:

  • Anda tidak dapat langsung membaca dari tujuh hari yang lalu jika Anda baru saja mengaktifkan PITR.
  • Jika ingin mengaktifkan PITR saat membuat database, Anda harus menggunakan perintah gcloud firestore databases create. Mengaktifkan PITR saat membuat database menggunakan konsol Google Cloud tidak didukung.
  • Firestore dengan kompatibilitas MongoDB mulai mempertahankan versi dari titik setelah mengaktifkan PITR.
  • Setelah menonaktifkan PITR, Anda tidak dapat membaca data PITR selama periode PITR.
  • Jika Anda mengaktifkan kembali PITR segera setelah menonaktifkannya, data PITR sebelumnya tidak lagi tersedia. Setiap data PITR yang dibuat sebelum menonaktifkan PITR akan dihapus setelah tanggal habis masa berlaku PITR.
  • Jika Anda tidak sengaja menghapus data dalam satu jam terakhir dan PITR dinonaktifkan, Anda dapat memulihkan data dengan mengaktifkan PITR dalam waktu satu jam setelah penghapusan.
  • Setiap pembacaan yang dilakukan pada data PITR yang sudah tidak berlaku akan gagal.

Mengaktifkan PITR

Sebelum menggunakan PITR, aktifkan penagihan untuk project Google Cloud Anda. Hanya project Google Cloud dengan penagihan aktif yang dapat menggunakan fungsi PITR.

Untuk mengaktifkan PITR untuk database Anda:

Konsol

  1. Di konsol Google Cloud , buka halaman Databases.

    Buka Databases

  2. Pilih database yang diperlukan dari daftar database.

  3. Di menu navigasi, klik Disaster Recovery.

  4. Klik Edit untuk mengedit setelan.

  5. Centang kotak Enable point-in-time recovery, lalu klik Save.

Mengaktifkan PITR akan menimbulkan biaya penyimpanan. Lihat Harga untuk informasi selengkapnya.

Untuk menonaktifkan PITR, hapus centang pada kotak Enable point-in-time recovery dari halaman Disaster Recovery di konsol Google Cloud .

gcloud

Aktifkan PITR selama pembuatan database dengan perintah gcloud firestore databases create dan --enable-ptir sebagai berikut:

gcloud firestore databases create\
  --location=LOCATION\
  --database=DATABASE_ID\
  --edition=enterprise\
  --enable-pitr

Ganti nilai sebagai berikut:

  • LOCATION - lokasi tempat Anda ingin membuat database.
  • DATABASE_ID - ditetapkan ke ID database.

Anda dapat menonaktifkan PITR menggunakan perintah gcloud firestore databases update sebagai berikut:

gcloud firestore databases update\
  --database=DATABASE_ID\
  --no-enable-pitr

Ganti nilai sebagai berikut:

  • DATABASE_ID - ditetapkan ke ID database atau (default).

Mendapatkan periode retensi data dan waktu versi paling awal

Konsol

  1. Di konsol Google Cloud , buka halaman Databases.

    Buka Databases

  2. Pilih database yang diperlukan dari daftar database.

  3. Di menu navigasi, klik Disaster Recovery.

  4. Di bagian Settings, perhatikan Retention period dan Earliest version time.

    • Periode retensi data: periode ketika Firestore dengan kompatibilitas MongoDB menyimpan semua versi data untuk database. Nilainya adalah satu jam saat PITR dinonaktifkan dan tujuh hari saat PITR diaktifkan.
    • Earliest version time: stempel waktu paling awal saat data versi lama dapat dibaca di periode PITR. Nilai ini terus diupdate oleh Firestore dengan kompatibilitas MongoDB dan menjadi tidak berlaku lagi saat dikueri. Jika Anda menggunakan nilai ini untuk memulihkan data, pastikan untuk memperhitungkan waktu sejak saat nilai dikueri hingga saat Anda memulai pemulihan.
    • Pemulihan point-in-time: menampilkan Enabled, jika PITR diaktifkan. Jika PITR dinonaktifkan, Anda akan melihat Disabled.

gcloud

Jalankan perintah gcloud firestore databases describe sebagai berikut:

gcloud firestore databases describe --database=DATABASE_ID

Ganti DATABASE_ID dengan ID database atau '(default)'.

Berikut output-nya:

    appEngineIntegrationMode: ENABLED
    concurrencyMode: PESSIMISTIC
    createTime: '2021-03-24T17:02:35.234Z'
    deleteProtectionState: DELETE_PROTECTION_DISABLED
    earliestVersionTime: '2023-06-12T16:17:25.222474Z'
    etag: IIDayqOevv8CMNTvyNK4uv8C
    keyPrefix: s
    locationId: nam5
    name: projects/PROJECT_ID/databases/DATABASE_ID
    pointInTimeRecoveryEnablement: POINT_IN_TIME_RECOVERY_DISABLED
    type: FIRESTORE_NATIVE
    uid: 5230c382-dcd2-468f-8cb3-2a1acfde2b32
    updateTime: '2021-11-17T17:48:22.171180Z'
    versionRetentionPeriod: 3600s

dalam hal ini,

  • earliestVersionTime: stempel waktu data PITR paling awal yang disimpan.
  • pointInTimeRecoveryEnablement: menampilkan POINT_IN_TIME_RECOVERY_ENABLED, jika PITR diaktifkan. Jika PITR dinonaktifkan, Anda akan melihat POINT_IN_TIME_RECOVERY_DISABLED atau kolom pointInTimeRecoveryEnablement mungkin tidak ditampilkan.
  • versionRetentionPeriod: jangka waktu data PITR dipertahankan dalam milidetik. Nilainya dapat berupa satu jam saat PITR dinonaktifkan atau tujuh hari jika PITR diaktifkan.

Membaca data PITR

Anda dapat membaca data PITR menggunakan sesi snapshot di berbagai driver klien MongoDB. Tetapkan snapshotTimestamp pada sesi. Contoh berikut menggunakan driver Java MongoDB, dan fitur serupa tersedia di driver lain:

Java

    var session =
        mongoClient.startSession(ClientSessionOptions.builder().snapshot(true).build());
  session.setSnapshotTimestamp(new BsonTimestamp(seconds, nanos));

  // run a find query with PITR timestamp
  collection.find(session, <filter>).toList();

  // run an aggregation query pipeline with PITR timestamp
  collection.aggregate(session, <aggregation pipeline stages>).toList();

  // run distinct command with PITR timestamp
  collection.distinct(session, <field>, <return value type class>).toList();

Di MongoDB, BsonTimestamp adalah jenis BSON internal MongoDB saja berukuran 64 bit. 32 bit pertama merepresentasikan detik stempel waktu epoch dan 32 bit terakhir merepresentasikan jumlah operasi ordinal dalam cluster MongoDB.

Di Firestore dengan kompatibilitas MongoDB, stempel waktu snapshot, yang masih menggunakan jenis nilai BsonTimestamp, menafsirkan 32 bit pertama sebagai detik stempel waktu epoch, tetapi 32 bit terakhir sebagai nanodetik dalam detik. Perhatikan bahwa tidak semua snapshot PITR nanodetik didukung. Stempel waktu mikrodetik dalam 1 jam terakhir diizinkan, dan stempel waktu menit penuh dari 7 hari terakhir diizinkan. Lihat ringkasan pemulihan point-in-time (PITR) untuk mengetahui stempel waktu baca yang didukung.

Mengekspor dan mengimpor dari data PITR

Anda dapat mengekspor database ke Cloud Storage dari data PITR menggunakan perintah gcloud firestore export. Anda dapat mengekspor data PITR dengan stempel waktu satu menit dalam tujuh hari terakhir, tetapi tidak lebih awal dari earliestVersionTime. Jika data tidak lagi ada di stempel waktu yang ditentukan, operasi ekspor akan gagal.

Operasi ekspor PITR mendukung semua filter, termasuk ekspor semua dokumen dan ekspor koleksi tertentu.

  1. Ekspor database, dengan menentukan parameter snapshot-time ke stempel waktu pemulihan yang dipilih.

    gcloud

    Jalankan perintah berikut untuk mengekspor database ke bucket Anda.

    gcloud firestore export gs://BUCKET_NAME_PATH \
        --snapshot-time=PITR_TIMESTAMP \
        --collection-ids=COLLECTION_IDS
    

    Ganti kode berikut:

    • BUCKET_NAME_PATH - bucket Cloud Storage yang valid dengan awalan jalur opsional tempat file ekspor disimpan.
    • PITR_TIMESTAMP - stempel waktu PITR pada tingkat perincian menit, misalnya, 2023-05-26T10:20:00.00Z atau 2023-10-19T10:30:00.00-07:00.
    • COLLECTION_IDS - daftar ID koleksi atau ID kelompok koleksi, misalnya-'specific-collection-group1','specific-collection-group2'.

    Perhatikan hal-hal berikut sebelum mengekspor data PITR:

    • Tentukan stempel waktu dalam format RFC 3339. Misalnya, 2023-05-26T10:20:00.00Z atau 2023-10-19T10:30:00.00-07:00.
    • Pastikan stempel waktu yang Anda tentukan adalah stempel waktu keseluruhan satu menit dalam tujuh hari terakhir, tetapi tidak lebih awal dari earliestVersionTime. Jika data sudah tidak ada di stempel waktu yang ditentukan, akan terjadi error. Stempel waktu harus satu menit penuh, meskipun waktu yang ditentukan berada dalam satu jam terakhir.
    • Anda tidak akan ditagih untuk ekspor PITR yang gagal.
  2. Mengimpor ke database.

    Gunakan langkah-langkah di bagian Mengimpor semua dokumen untuk mengimpor database yang telah diekspor. Jika ada dokumen yang sudah ada dalam database Anda, dokumen tersebut akan ditimpa.

Meng-clone dari database

Anda dapat meng-clone database yang ada pada stempel waktu yang dipilih ke database baru:

  • Database yang di-clone adalah database baru yang akan dibuat di lokasi yang sama dengan database sumber.

    Untuk membuat clone, Firestore menggunakan data pemulihan point-in-time (PITR) dari database sumber. Database yang di-clone mencakup semua data dan indeks.

  • Secara default, database yang di-clone akan dienkripsi dengan cara yang sama seperti database sumber, menggunakan enkripsi default Google atau enkripsi CMEK. Anda dapat menentukan jenis enkripsi yang berbeda atau menggunakan kunci yang berbeda untuk enkripsi CMEK.

  • Stempel waktu memiliki perincian satu menit dan menentukan titik waktu di masa lalu, dalam periode yang ditentukan oleh interval PITR:

    • Jika PITR diaktifkan untuk database Anda, Anda dapat memilih menit mana saja dalam 7 hari terakhir (atau kurang jika PITR diaktifkan kurang dari 7 hari yang lalu).
    • Jika PITR tidak diaktifkan, Anda dapat memilih menit mana pun dalam satu jam terakhir.
    • Anda dapat memeriksa stempel waktu paling awal yang dapat Anda pilih dalam deskripsi database Anda.

Konsol

  1. Di konsol Google Cloud , buka halaman Databases.

    Buka Databases

  2. Klik View more di baris tabel untuk database yang ingin Anda clone. Klik Clone. Dialog Buat clone akan muncul.

  3. Pada dialog Buat clone, berikan parameter untuk meng-clone database:

    1. Di kolom Beri ID pada clone, masukkan ID database untuk database baru yang di-clone. ID database ini tidak boleh dikaitkan dengan database yang sudah ada.

    2. Di kolom Clone dari, pilih titik waktu yang akan digunakan untuk cloning. Waktu yang dipilih sesuai dengan stempel waktu PITR, pada tingkat perincian menit.

  4. Klik Buat clone.

gcloud

Gunakan perintah gcloud alpha firestore databases clone untuk meng-clone database:

gcloud alpha firestore databases clone \
--source-database='SOURCE_DATABASE_ID' \
--snapshot-time='PITR_TIMESTAMP' \
--destination-database='DESTINATION_DATABASE_ID'

Ganti kode berikut:

  • SOURCE_DATABASE_ID: ID database dari database yang ada yang ingin Anda clone.

  • PITR_TIMESTAMP: stempel waktu PITR dalam format RFC 3339, pada tingkat perincian menit. Misalnya: 2025-06-01T10:20:00.00Z atau 2025-06-01T10:30:00.00-07:00.

  • DESTINATION_DATABASE_ID: ID database untuk database baru yang dikloning. ID database ini tidak boleh dikaitkan dengan database yang ada.

Contoh:

gcloud alpha firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='projects/example-project/databases/example-dest-db'

Mengubah konfigurasi enkripsi database yang di-clone

Secara default, database yang di-clone akan memiliki konfigurasi enkripsi yang sama dengan database sumber. Untuk mengubah konfigurasi enkripsi, gunakan argumen --encryption-type:

  • (Default) use-source-encryption: menggunakan konfigurasi enkripsi yang sama dengan database sumber.
  • google-default-encryption: menggunakan enkripsi default Google.
  • customer-managed-encryption: menggunakan enkripsi CMEK. Tentukan ID kunci dalam argumen --kms-key-name.

Contoh berikut menunjukkan cara mengonfigurasi enkripsi CMEK untuk database yang di-clone:

gcloud alpha firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='projects/example-project/databases/example-dest-db' \
--encryption-type='customer-managed-encryption' \
--kms-key-name='projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key'