Mencadangkan dan memulihkan data

Halaman ini menjelaskan cara menggunakan fitur pencadangan terjadwal Cloud Firestore. Gunakan pencadangan untuk melindungi data Anda dari kerusakan data tingkat aplikasi atau dari penghapusan data yang tidak disengaja.

Dengan pencadangan, Anda dapat mengonfigurasi jadwal pencadangan untuk mengambil cadangan harian atau mingguan dari database yang ditentukan. Anda kemudian dapat menggunakan cadangan ini untuk memulihkan data ke database baru.

Tentang pencadangan

Cadangan adalah salinan database yang konsisten pada suatu waktu. Cadangan berisi semua konfigurasi data dan indeks pada saat itu. Cadangan tidak berisi kebijakan waktu aktif database. Cadangan berada di lokasi yang sama dengan database sumber.

Cadangan memiliki periode retensi yang dapat dikonfigurasi dan disimpan hingga periode retensi data berakhir atau sampai Anda menghapus cadangan. Menghapus database sumber tidak akan otomatis menghapus cadangan terkait.

Cloud Firestore menyimpan metadata yang terkait dengan pencadangan dan jadwal pencadangan terkait database. Cloud Firestore menyimpan metadata ini hingga semua cadangan untuk database habis masa berlakunya atau dihapus.

Pembuatan atau penyimpanan cadangan tidak memengaruhi performa operasi baca atau tulis dalam database live Anda.

Biaya

Jika menggunakan cadangan, Anda dikenai biaya untuk hal-hal berikut:

  • Jumlah penyimpanan yang digunakan oleh setiap cadangan.
  • Untuk operasi pemulihan, Anda akan ditagih berdasarkan ukuran cadangan.

Untuk mengetahui detail dan tarif persisnya, lihat halaman Harga.

Sebelum memulai

Fitur ini memerlukan paket harga Blaze.

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan guna mengelola pencadangan dan jadwal pencadangan, minta administrator Anda memberikan satu atau beberapa peran Identity and Access Management berikut:

  • roles/datastore.owner: Akses penuh ke database Cloud Firestore
  • Peran berikut ini juga tersedia, tetapi tidak terlihat di Konsol Google Cloud. Gunakan Google Cloud CLI untuk menetapkan peran ini:

    • roles/datastore.backupsAdmin: Akses baca dan tulis ke cadangan
    • roles/datastore.backupsViewer: Akses baca ke cadangan
    • roles/datastore.backupSchedulesAdmin: Akses baca dan tulis ke jadwal pencadangan
    • roles/datastore.backupSchedulesViewer: Akses baca ke jadwal pencadangan
    • roles/datastore.restoreAdmin: Izin untuk memulai operasi pemulihan

Membuat dan mengelola jadwal pencadangan

Contoh di bawah menunjukkan cara menyiapkan jadwal pencadangan. Untuk setiap database, Anda dapat mengonfigurasi hingga satu jadwal pencadangan harian dan satu jadwal pencadangan mingguan. Anda tidak dapat mengonfigurasi beberapa jadwal pencadangan mingguan untuk hari yang berbeda dalam seminggu.

Anda tidak dapat mengonfigurasi waktu persis untuk pencadangan. Pencadangan dilakukan pada waktu yang berbeda setiap hari. Untuk jadwal pencadangan mingguan, Anda dapat mengonfigurasi hari dalam seminggu untuk mengambil cadangan.

Membuat jadwal pencadangan

Untuk membuat jadwal pencadangan database, gunakan perintah gcloud firestore backups schedules create atau perintah firebase firestore:databases:backups:schedules.

Membuat jadwal pencadangan harian

gcloud
Untuk membuat jadwal pencadangan harian, tetapkan flag --recurrence ke daily:
gcloud firestore backups schedules create \
--database='DATABASE_ID' \
--recurrence=daily \
--retention=RETENTION_PERIOD

Ganti kode berikut:

  • DATABASE_ID: ID database yang akan dicadangkan. Tetapkan ke '(default)' untuk database default.
  • RETENTION_PERIOD: Tetapkan ini ke nilai hingga 14 minggu (14w).
Firebase CLI
Untuk membuat jadwal pencadangan harian, tetapkan flag --recurrence ke DAILY:
firebase firestore:backups:schedules:create \
--database 'DATABASE_ID' \
--recurrence 'DAILY' \
--retention RETENTION_PERIOD

Ganti kode berikut:

  • DATABASE_ID: ID database yang akan dicadangkan. Tetapkan ke '(default)' untuk database default.
  • RETENTION_PERIOD: Tetapkan ini ke nilai hingga 14 minggu (14w).
Terraform
Untuk membuat jadwal pencadangan harian, buat resource google_firestore_backup_schedule.
resource "google_firestore_backup_schedule" "daily-backup" {
  project  = PROJECT_ID
  database = DATABASE_ID

  retention = RETENTION_PERIOD_SECONDS

  daily_recurrence {}
}

Ganti kode berikut:

  • PROJECT_ID: ID project.
  • DATABASE_ID: ID database yang akan dicadangkan. Tetapkan ke '(default)' untuk database default.
  • Anda juga dapat menggunakan referensi resource ke resource Terraform dari jenis google_firestore_database.
  • RETENTION_PERIOD_SECONDS: Tetapkan ini ke nilai dalam detik, diikuti dengan "s". Nilai maksimumnya adalah 8467200s (14 minggu).

Membuat jadwal pencadangan mingguan

gcloud
Untuk membuat jadwal pencadangan mingguan, tetapkan flag --recurrence ke weekly:
gcloud firestore backups schedules create \
--database='DATABASE_ID' \
--recurrence=weekly \
--retention=RETENTION_PERIOD \
--day-of-week=DAY
Ganti kode berikut:
  • DATABASE_ID: ID database yang akan dicadangkan. Tetapkan ke '(default)' untuk database default.
  • RETENTION_PERIOD: Tetapkan ini ke nilai hingga 14 minggu (14w).
  • DAY: Tanggal untuk melakukan pencadangan. Tetapkan ke salah satu opsi berikut:
    • SUN untuk hari Minggu
    • MON untuk hari Senin
    • TUE untuk hari Selasa
    • WED untuk hari Rabu
    • THU untuk hari Kamis
    • FRI untuk hari Jumat
    • SAT untuk hari Sabtu
Firebase CLI
Untuk membuat jadwal pencadangan mingguan, tetapkan flag --recurrence ke WEEKLY:
firebase firestore:backups:schedules:create \
--database 'DATABASE_ID' \
--recurrence 'WEEKLY' \
--retention RETENTION_PERIOD
--day-of-week DAY
Ganti kode berikut:
  • DATABASE_ID: ID database yang akan dicadangkan. Tetapkan ke '(default)' untuk database default.
  • RETENTION_PERIOD: Tetapkan ini ke nilai hingga 14 minggu (14w).
  • DAY: Tanggal untuk melakukan pencadangan. Tetapkan ke salah satu opsi berikut:
    • SUNDAY untuk hari Minggu
    • MONDAY untuk hari Senin
    • TUESDAY untuk hari Selasa
    • WEDNESDAY untuk hari Rabu
    • THURSDAY untuk hari Kamis
    • FRIDAY untuk hari Jumat
    • SATURDAY untuk hari Sabtu
Terraform
Untuk membuat jadwal pencadangan mingguan, buat resource google_firestore_backup_schedule.
resource "google_firestore_backup_schedule" "weekly-backup" {
  project  = PROJECT_ID
  database = DATABASE_ID

  retention = RETENTION_PERIOD_SECONDS

  weekly_recurrence {
    day = DAY
  }
}

Ganti kode berikut:

  • PROJECT_ID: ID project.
  • DATABASE_ID: ID database yang akan dicadangkan. Tetapkan ke '(default)' untuk database default.
  • Anda juga dapat menggunakan referensi resource ke resource Terraform dari jenis google_firestore_database.
  • RETENTION_PERIOD_SECONDS: Tetapkan ini ke nilai dalam detik, diikuti dengan "s". Nilai maksimumnya adalah 8467200s (14 minggu).
  • DAY: Tanggal untuk melakukan pencadangan. Tetapkan ke salah satu opsi berikut:
    • SUNDAY untuk hari Minggu
    • MONDAY untuk hari Senin
    • TUESDAY untuk hari Selasa
    • WEDNESDAY untuk hari Rabu
    • THURSDAY untuk hari Kamis
    • FRIDAY untuk hari Jumat
    • SATURDAY untuk hari Sabtu

Mencantumkan jadwal pencadangan

Untuk mencantumkan semua jadwal pencadangan untuk database, gunakan salah satu metode berikut:

gcloud
Gunakan perintah gcloud firestore backups schedules list.
gcloud firestore backups schedules list \
--database='DATABASE_ID'
Ganti DATABASE_ID dengan ID database. Gunakan '(default)' untuk database default.
Firebase CLI
Gunakan perintah firebase firestore:backups:schedules:list.
firebase firestore:backups:schedules:list \
--database 'DATABASE_ID'
Ganti DATABASE_ID dengan ID database. Gunakan '(default)' untuk database default.

Mendeskripsikan jadwal pencadangan

Untuk mengambil informasi tentang jadwal pencadangan, gunakan salah satu metode berikut:

gcloud
Gunakan perintah gcloud firestore backups schedules describe:
gcloud firestore backups schedules describe \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID
Ganti kode berikut:
  • DATABASE_ID: ID database yang akan dicadangkan. Tetapkan ke '(default)' untuk database default.
  • BACKUP_SCHEDULE_ID: ID jadwal pencadangan. Anda dapat melihat ID setiap jadwal pencadangan saat mencantumkan semua jadwal pencadangan.

Memperbarui jadwal pencadangan

Untuk memperbarui periode retensi data jadwal cadangan, gunakan salah satu metode berikut:

gcloud
Gunakan perintah gcloud firestore backups schedules update:
gcloud firestore backups schedules update \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID \
--retention=RETENTION_PERIOD
Ganti kode berikut:
  • DATABASE_ID: ID database yang akan dicadangkan. Tetapkan ke '(default)' untuk database default.
  • BACKUP_SCHEDULE_ID: ID jadwal pencadangan. Anda dapat melihat ID setiap jadwal pencadangan saat mencantumkan semua jadwal pencadangan.
  • RETENTION_PERIOD: Tetapkan ini ke nilai hingga 14 minggu (14w).
Firebase CLI
Gunakan perintah firebase firestore:backups:schedules:update:
firebase firestore:backups:schedules:update \
BACKUP_SCHEDULE \
--retention RETENTION_PERIOD
Ganti kode berikut:
  • BACKUP_SCHEDULE: Nama resource lengkap dari jadwal pencadangan. Anda dapat melihat nama setiap jadwal pencadangan saat mencantumkan semua jadwal pencadangan.
  • RETENTION_PERIOD: Tetapkan ini ke nilai hingga 14 minggu (14w).

Anda dapat memperbarui periode retensi data dari jadwal pencadangan, tetapi Anda tidak dapat memperbarui pengulangannya. Jika Anda memerlukan jadwal pencadangan dengan pengulangan yang berbeda, hapus jadwal pencadangan lama jika tidak lagi diperlukan dan buat jadwal pencadangan baru dengan pengulangan yang diinginkan.

Menghapus jadwal pencadangan

Untuk menghapus jadwal pencadangan, gunakan salah satu metode berikut:

gcloud
Gunakan perintah gcloud firestore backups schedules delete:
gcloud firestore backups schedules delete \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID
Ganti kode berikut:
  • DATABASE_ID: ID database yang akan dicadangkan. Tetapkan ke '(default)' untuk database default.
  • BACKUP_SCHEDULE_ID: ID jadwal pencadangan. Anda dapat melihat ID setiap jadwal pencadangan saat mencantumkan semua jadwal pencadangan.
Firebase CLI
Gunakan perintah firebase firestore:backups:schedules:delete:
firebase firestore:backups:schedules:delete \
BACKUP_SCHEDULE
Ganti kode berikut:

Perhatikan bahwa menghapus jadwal pencadangan tidak akan menghapus cadangan yang sudah dibuat dengan jadwal ini. Anda dapat menunggu hingga masa berlakunya habis setelah periode retensi data, atau menghapus cadangan secara manual, lihat menghapus cadangan.

Mengelola pencadangan

Mencantumkan pencadangan

Untuk mencantumkan pencadangan yang tersedia, gunakan salah satu metode berikut:

gcloud
Gunakan perintah gcloud firestore backups list:
gcloud firestore backups list \
--format="table(name, database, state)"
Flag --format="table(name, database, state)" memformat output ke dalam format yang lebih mudah dibaca. Untuk mencantumkan hanya cadangan dari lokasi tertentu, gunakan flag --location:
gcloud firestore backups list \
--location=LOCATION \
--format="table(name, database, state)"
Ganti LOCATION dengan nama lokasi Cloud Firestore.
Firebase CLI
Gunakan perintah firebase firestore:backups:list:
firebase firestore:backups:list
Untuk mencantumkan hanya cadangan dari lokasi tertentu, gunakan flag --location:
firebase firestore:backups:list \
--location=LOCATION
Ganti LOCATION dengan nama lokasi Cloud Firestore.

Mendeskripsikan pencadangan

Untuk melihat detail tentang cadangan, gunakan salah satu metode berikut:

gcloud
Gunakan perintah gcloud firestore backups describe:
gcloud firestore backups describe \
--location=LOCATION \
--backup=BACKUP_ID
Ganti kode berikut:
Firebase CLI
Gunakan perintah firebase firestore:backups:get:
firebase firestore:backups:get BACKUP
Ganti kode berikut:

Menghapus cadangan

Untuk menghapus cadangan, gunakan salah satu metode berikut. Peringatan: Anda tidak dapat memulihkan cadangan yang dihapus.
gcloud
Gunakan perintah gcloud firestore backups delete:
gcloud firestore backups delete \
--location=LOCATION \
--backup=BACKUP_ID
Ganti kode berikut:
Firebase CLI
Gunakan perintah firebase firestore:backups:delete:
firebase firestore:backups:delete \
BACKUP
Ganti kode berikut:

Memulihkan data dari cadangan database

Operasi pemulihan akan menulis data dari cadangan ke database Cloud Firestore yang baru.

Untuk memulai operasi pemulihan, gunakan salah satu metode berikut:

gcloud
Gunakan perintah gcloud firestore databases restore:
gcloud firestore databases restore \
--source-backup=projects/PROJECT_ID/locations/LOCATION/backups/BACKUP_ID \
--destination-database='DATABASE_ID'
Ganti kode berikut:
  • PROJECT_ID: Project ID Anda.
  • LOCATION: Lokasi pencadangan database dan lokasi database baru yang dibuat untuk data yang dipulihkan.
  • BACKUP_ID: ID cadangan. Anda dapat melihat ID setiap cadangan saat mencantumkan semua cadangan.
  • DATABASE_ID: ID database untuk database yang baru. Anda tidak dapat menggunakan ID database yang sudah digunakan.
Output-nya akan menyertakan komponen metadata, name, dan response:
metadata:
  '@type': type.googleapis.com/google.firestore.admin.v1.RestoreDatabaseMetadata
  backup: projects/PROJECT_ID/locations/LOCATION/backups/BACKUP_ID
  database: projects/PROJECT_ID/databases/DATABASE_ID
  operationState: PROCESSING
  progressPercentage:
    completedWork: '20'
    estimatedWork: '100'
  startTime: '2023-12-06T14:20:17.398325Z'
name: projects/PROJECT_ID/databases/DATABASE_ID/operations/operation_uuid
response:
  '@type': type.googleapis.com/google.firestore.admin.v1.Database
  createTime: '2023-12-06T14:20:17.398325Z'
  name: projects/PROJECT_ID/databases/DATABASE_ID
  ...
Kolom metadata mencakup komponen progressPercentage, yang memerinci perkiraan progres pemulihan sejauh ini, dan operationState yang menentukan status pemulihan secara keseluruhan. Untuk mengambil informasi ini lagi, gunakan gcloud firestore operations list:
gcloud firestore operations list --database=DATABASE_ID
atau, menggunakan kolom name dari output yang dijelaskan di atas, dengan gcloud firestore operations describe:
gcloud firestore operations describe OPERATION_NAME
Firebase CLI
Gunakan perintah firebase firestore:databases:restore:
firebase firestore:databases:restore \
--backup 'BACKUP' \
--database 'DATABASE_ID'
Ganti kode berikut:
  • BACKUP: Nama resource lengkap dari cadangan. Anda dapat melihat nama setiap cadangan saat mencantumkan semua cadangan.
  • DATABASE_ID: ID database untuk database yang baru. Anda tidak dapat menggunakan ID database yang sudah digunakan.