الاحتفاظ بنسخة احتياطية من البيانات واستعادتها

توضّح هذه الصفحة كيفية استخدام ميزة Cloud Firestoreالنُسخ الاحتياطية المجدوَلة . استخدِم النُسخ الاحتياطية لحماية بياناتك من التلف على مستوى التطبيق أو من حذف البيانات بدون قصد.

تتيح لك النسخ الاحتياطية تهيئة جداول النسخ الاحتياطي لاتخاذ نسخ احتياطية يومية أو أسبوعية لقاعدة البيانات المحددة. يمكنك بعد ذلك استخدام هذه النسخ الاحتياطية لاستعادة البيانات إلى قاعدة بيانات جديدة.

لمحة عن النُسخ الاحتياطية

النسخة الاحتياطية هي نسخة متّسقة من قاعدة البيانات في وقت معيّن. تحتوي النسخة الاحتياطية على جميع البيانات وإعدادات الفهرس في تلك النقطة الزمنية. لا تحتوي النسخة الاحتياطية على سياسات مدة الصلاحية لقاعدة البيانات. تتوفّر النسخة الاحتياطية في الموقع الجغرافي نفسه لقاعدة البيانات المصدر.

تتضمّن النُسخ الاحتياطية فترة الاحتفاظ بالبيانات التي يمكن ضبطها، ويتم تخزينها إلى أن تنتهي فترة الاحتفاظ بالبيانات أو إلى أن تحذف النسخة الاحتياطية. لا يؤدي حذف قاعدة بيانات المصدر إلى حذف النُسخ الاحتياطية ذات الصلة تلقائيًا.

تخزِّن Cloud Firestore البيانات الوصفية المتعلقة بالنسخ الاحتياطية والجداول الزمنية للنسخ الاحتياطي المتعلقة بقاعدة البيانات. يحتفظ Cloud Firestore بهذه البيانات الوصفية إلى أن تنتهي صلاحية كل النُسخ الاحتياطية للقاعدة البيانات أو يتم حذفها.

لا يؤثّر إنشاء نُسخ احتياطية أو الاحتفاظ بها في أداء عمليات القراءة أو الكتابة في قاعدة البيانات النشطة.

التكاليف

عند استخدام النُسخ الاحتياطية، يتم تحصيل الرسوم منك مقابل ما يلي:

  • مقدار مساحة التخزين التي يستخدمها كلّ نسخة احتياطية
  • بالنسبة إلى عملية الاستعادة، يتم تحصيل رسوم منك استنادًا إلى حجم النسخة الاحتياطية.

لمزيد من التفاصيل والتعرف على الأسعار الدقيقة، يُرجى الاطّلاع على صفحة الأسعار.

قبل البدء

تتطلّب هذه الميزة خطة أسعار Blaze.

الأدوار المطلوبة

للحصول على الأذونات التي تحتاجها لإدارة النُسخ الاحتياطية وجداولها الزمنية، اطلب من المشرف منحك دورًا واحدًا أو أكثر من الأدوار التالية في "إدارة الهوية والوصول":

  • roles/datastore.owner: الوصول الكامل إلى قاعدة بيانات Cloud Firestore
  • تتوفّر أيضًا الأدوار التالية، ولكنّها لا تظهر في وحدة تحكّم Google Cloud. استخدِم Google Cloud CLI لإسناد هذه الأدوار:

    • roles/datastore.backupsAdmin: إذن بالقراءة والكتابة في النُسخ الاحتياطية
    • roles/datastore.backupsViewer: إذن بالقراءة للوصول إلى النُسخ الاحتياطية
    • roles/datastore.backupSchedulesAdmin: إذن بالقراءة والكتابة في جداول النسخ الاحتياطي
    • roles/datastore.backupSchedulesViewer: الاطّلاع على جداول زمنية للاحتفاظ بنسخة احتياطية
    • roles/datastore.restoreAdmin: الأذونات لبدء عمليات الاستعادة

إنشاء جداول احتياطية وإدارتها

توضح الأمثلة أدناه كيفية إعداد جدول زمني احتياطي. لكل قاعدة بيانات، يمكنك ضبط ما يصل إلى جدول زمني واحد للاحتفاظ بنسخة احتياطية يوميًا وما يصل إلى جدول زمني واحد للاحتفاظ بنسخة احتياطية أسبوعيًا. لا يمكنك تهيئة جداول زمنية أسبوعية متعددة للنسخ الاحتياطية لأيام مختلفة من الأسبوع.

لا يمكنك ضبط الوقت المحدد بدقة لإنشاء النسخة الاحتياطية. يتم إنشاء النُسخ الاحتياطية في أوقات مختلفة كل يوم. بالنسبة إلى جداول النسخ الاحتياطي الأسبوعية، يمكنك ضبط يوم الأسبوع للاحتفاظ بنسخة احتياطية.

إنشاء جدول زمني احتياطي

لإنشاء جدول زمني للنسخ الاحتياطي لقاعدة بيانات، استخدِم الأمر gcloud firestore backups schedules create أو الأمر firebase firestore:databases:backups:schedules.

إنشاء جدول زمني يومي للنسخ الاحتياطي

gcloud
لإنشاء جدول زمني يومي للاحتفاظ بنسخة احتياطية، اضبط العلامة --recurrence على daily:
gcloud firestore backups schedules create \
--database='DATABASE_ID' \
--recurrence=daily \
--retention=RETENTION_PERIOD

استبدِل ما يلي:

  • DATABASE_ID: رقم تعريف قاعدة البيانات التي تريد الاحتفاظ بنسخة احتياطية منها. اضبط القيمة على '(default)' لقاعدة البيانات التلقائية.
  • RETENTION_PERIOD: اضبط هذه القيمة على مدة تصل إلى 14 أسبوعًا (14w).
Firebase CLI
لإنشاء جدول زمني يومي للاحتفاظ بنسخة احتياطية، اضبط علامة --recurrence على DAILY:
firebase firestore:backups:schedules:create \
--database 'DATABASE_ID' \
--recurrence 'DAILY' \
--retention RETENTION_PERIOD

استبدِل ما يلي:

  • DATABASE_ID: رقم تعريف قاعدة البيانات التي تريد الاحتفاظ بنسخة احتياطية منها. اضبط القيمة على '(default)' لقاعدة البيانات التلقائية.
  • RETENTION_PERIOD: اضبط هذه القيمة على مدة تصل إلى 14 أسبوعًا (14w).
Terraform
لإنشاء جدول زمني احتياطي يومي، أنشئ مورد google_firestore_backup_schedule.
resource "google_firestore_backup_schedule" "daily-backup" {
  project  = PROJECT_ID
  database = DATABASE_ID

  retention = RETENTION_PERIOD_SECONDS

  daily_recurrence {}
}

استبدِل ما يلي:

  • PROJECT_ID: رقم تعريف المشروع.
  • DATABASE_ID: رقم تعريف قاعدة البيانات التي تريد الاحتفاظ بنسخة احتياطية منها. اضبط القيمة على '(default)' لقاعدة البيانات التلقائية.
  • يمكنك أيضًا استخدام مرجع مورد لمحاولة الوصول إلى مورد Terraform من النوع google_firestore_database.
  • RETENTION_PERIOD_SECONDS: اضبط هذه القيمة على قيمة بالثواني، متبوعة بـ "s". الحدّ الأقصى للقيمة هو 8467200s (14 أسبوعًا).

إنشاء جدول زمني احتياطي أسبوعي

gcloud
لإنشاء جدول زمني احتياطي أسبوعي، اضبط العلامة --recurrence على weekly:
gcloud firestore backups schedules create \
--database='DATABASE_ID' \
--recurrence=weekly \
--retention=RETENTION_PERIOD \
--day-of-week=DAY
استبدِل ما يلي:
  • DATABASE_ID: رقم تعريف قاعدة البيانات التي تريد الاحتفاظ بنسخة احتياطية منها. اضبط القيمة على '(default)' لقاعدة البيانات التلقائية.
  • RETENTION_PERIOD: اضبط هذه القيمة على قيمة تصل إلى 14 أسبوعًا (14w).
  • DAY: يوم الأسبوع الذي يتم فيه إنشاء النسخة الاحتياطية اضبط أحد الإعدادات التالية:
    • SUN ليوم الأحد
    • MON ليوم الاثنين
    • TUE ليوم الثلاثاء
    • WED ليوم الأربعاء
    • THU يوم الخميس
    • FRI ليوم الجمعة
    • SAT ليوم السبت
Firebase CLI
لإنشاء جدول زمني أسبوعي للنسخ الاحتياطي، اضبط علامة --recurrence على WEEKLY:
firebase firestore:backups:schedules:create \
--database 'DATABASE_ID' \
--recurrence 'WEEKLY' \
--retention RETENTION_PERIOD
--day-of-week DAY
استبدِل ما يلي:
  • DATABASE_ID: رقم تعريف قاعدة البيانات التي تريد الاحتفاظ بنسخة احتياطية منها. اضبط القيمة على '(default)' لقاعدة البيانات التلقائية.
  • RETENTION_PERIOD: اضبط هذه القيمة على مدة تصل إلى 14 أسبوعًا (14w).
  • DAY: يوم من الأسبوع يتم فيه الاحتفاظ بنسخة احتياطية اضبط القيمة على أحد الخيارَين التاليَين:
    • SUNDAY ليوم الأحد
    • MONDAY ليوم الاثنين
    • TUESDAY ليوم الثلاثاء
    • WEDNESDAY ليوم الأربعاء
    • THURSDAY ليوم الخميس
    • FRIDAY ليوم الجمعة
    • SATURDAY يوم السبت
Terraform
لإنشاء جدول زمني احتياطي أسبوعي، أنشئ مورد 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
  }
}

استبدِل ما يلي:

  • PROJECT_ID: رقم تعريف المشروع.
  • DATABASE_ID: رقم تعريف قاعدة البيانات التي تريد الاحتفاظ بنسخة احتياطية منها. اضبط القيمة على '(default)' لقاعدة البيانات التلقائية.
  • يمكنك أيضًا استخدام مرجع مورد لمحاولة الوصول إلى مورد Terraform من النوع google_firestore_database.
  • RETENTION_PERIOD_SECONDS: اضبط هذه القيمة على ثوانٍ، متبوعة بـ "s". الحدّ الأقصى للقيمة هو 8467200s (14 أسبوعًا).
  • DAY: يوم من الأسبوع يتم فيه الاحتفاظ بنسخة احتياطية اضبط القيمة على أحد الخيارَين التاليَين:
    • SUNDAY ليوم الأحد
    • MONDAY ليوم الاثنين
    • TUESDAY ليوم الثلاثاء
    • WEDNESDAY ليوم الأربعاء
    • THURSDAY ليوم الخميس
    • FRIDAY ليوم الجمعة
    • SATURDAY ليوم السبت

عرض الجداول الزمنية للنسخ الاحتياطي

لسرد جميع جداول النسخ الاحتياطي لقاعدة بيانات، استخدم إحدى الطرق التالية:

gcloud
استخدِم الأمر gcloud firestore backups schedules list.
gcloud firestore backups schedules list \
--database='DATABASE_ID'
استبدِل DATABASE_ID بمعرّف قاعدة البيانات. استخدِم '(default)' لقاعدة البيانات التلقائية.
Firebase CLI
استخدِم الأمر firebase firestore:backups:schedules:list.
firebase firestore:backups:schedules:list \
--database 'DATABASE_ID'
استبدِل DATABASE_ID بمعرّف قاعدة البيانات. استخدِم '(default)' لقاعدة البيانات التلقائية.

وصف الجدول الزمني للاحتفاظ بنسخة احتياطية

لاسترداد معلومات حول جدول زمني للنسخ الاحتياطي، استخدِم إحدى الطرق التالية:

gcloud
استخدِم الأمر gcloud firestore backups schedules describe:
gcloud firestore backups schedules describe \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID
استبدِل ما يلي:
  • DATABASE_ID: رقم تعريف قاعدة البيانات التي تريد الاحتفاظ بنسخة احتياطية منها. اضبط القيمة على '(default)' لقاعدة البيانات التلقائية.
  • BACKUP_SCHEDULE_ID: رقم تعريف جدول زمني احتياطي يمكنك الاطّلاع على معرّف كل جدول زمني احتياطي عند إدراج جميع الجداول الزمنية الاحتياطية.

تعديل الجدول الزمني للاحتفاظ بنسخة احتياطية

لتعديل فترة الاحتفاظ بجدول زمني احتياطي، استخدِم إحدى الطريقتَين التاليتَين:

gcloud
استخدِم الأمر gcloud firestore backups schedules update:
gcloud firestore backups schedules update \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID \
--retention=RETENTION_PERIOD
استبدِل ما يلي:
  • DATABASE_ID: رقم تعريف قاعدة البيانات المطلوب الاحتفاظ بنسخة احتياطية منها اضبط القيمة على '(default)' لقاعدة البيانات التلقائية.
  • BACKUP_SCHEDULE_ID: رقم تعريف جدول زمني احتياطي. يمكنك الاطّلاع على رقم تعريف كل جدول زمني للاحتفاظ بنسخة احتياطية عند إدراج جميع الجداول الزمنية للاحتفاظ بنسخة احتياطية.
  • RETENTION_PERIOD: اضبط هذه القيمة على مدة تصل إلى 14 أسبوعًا (14w).
Firebase CLI
استخدِم الأمر firebase firestore:backups:schedules:update:
firebase firestore:backups:schedules:update \
BACKUP_SCHEDULE \
--retention RETENTION_PERIOD
استبدِل ما يلي:

يمكنك تعديل فترة الاحتفاظ بجدول زمني احتياطي، ولكن لا يمكنك تعديل تكراره. إذا كنت بحاجة إلى جدول احتياطي بمعدل تكرار مختلف، احذف الجدول الاحتياطي القديم إذا لم يعُد مطلوبًا وأنشئ جدولًا احتياطيًا جديدًا بالمعدل المطلوب.

حذف جدول زمني للنسخ الاحتياطية

لحذف جدول زمني للنسخ الاحتياطية، استخدِم إحدى الطريقتَين التاليتَين:

gcloud
استخدِم الأمر gcloud firestore backups schedules delete:
gcloud firestore backups schedules delete \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID
استبدِل ما يلي:
  • DATABASE_ID: رقم تعريف قاعدة البيانات التي تريد الاحتفاظ بنسخة احتياطية منها. اضبط القيمة على '(default)' لقاعدة البيانات التلقائية.
  • BACKUP_SCHEDULE_ID: رقم تعريف جدول زمني احتياطي يمكنك الاطّلاع على رقم تعريف كل جدول زمني للاحتفاظ بنسخة احتياطية عند إدراج جميع الجداول الزمنية للاحتفاظ بنسخة احتياطية.
Firebase CLI
استخدِم الأمر firebase firestore:backups:schedules:delete:
firebase firestore:backups:schedules:delete \
BACKUP_SCHEDULE
استبدِل ما يلي:

يُرجى العلم أنّ حذف جدول زمني للنسخ الاحتياطية لن يؤدي إلى حذف النُسخ الاحتياطية التي تم إنشاؤها من قبل باستخدام هذا الجدول الزمني. يمكنك الانتظار حتى تنتهي صلاحيتها بعد انتهاء فترة الاحتفاظ بالبيانات، أو لحذف نسخة احتياطية يدويًا، يُرجى الاطّلاع على حذف نسخة احتياطية.

إدارة النُسخ الاحتياطية

إدراج النُسخ الاحتياطية

لعرض النُسخ الاحتياطية المتاحة، استخدِم إحدى الطريقتَين التاليتَين:

gcloud
استخدِم الأمر gcloud firestore backups list:
gcloud firestore backups list \
--format="table(name, database, state)"
تُعدّل العلامة --format="table(name, database, state)" تنسيق الإخراج إلى تنسيق أكثر سهولة في القراءة. لعرض النُسخ الاحتياطية من موقع جغرافي معيّن فقط، استخدِم العلامة --location:
gcloud firestore backups list \
--location=LOCATION \
--format="table(name, database, state)"
استبدِل LOCATION باسم Cloud Firestore الموقع الجغرافي.
Firebase CLI
استخدِم الأمر firebase firestore:backups:list:
firebase firestore:backups:list
لعرض النُسخ الاحتياطية من موقع جغرافي معيّن فقط، استخدِم علامة --location:
firebase firestore:backups:list \
--location=LOCATION
استبدِل LOCATION باسم Cloud Firestore الموقع الجغرافي.

وصف نسخة احتياطية

للاطّلاع على تفاصيل حول خدمة احتياطية، استخدِم إحدى الطريقتَين التاليتَين:

gcloud
استخدِم الأمر gcloud firestore backups describe:
gcloud firestore backups describe \
--location=LOCATION \
--backup=BACKUP_ID
استبدِل ما يلي:
Firebase CLI
استخدِم الأمر firebase firestore:backups:get:
firebase firestore:backups:get BACKUP
استبدِل ما يلي:

حذف النسخة الاحتياطية

لحذف نسخة احتياطية، استخدِم إحدى الطريقتَين التاليتَين: تحذير: لا يمكنك استرداد نسخة احتياطية تم حذفها.
gcloud
استخدِم الأمر gcloud firestore backups delete:
gcloud firestore backups delete \
--location=LOCATION \
--backup=BACKUP_ID
استبدِل ما يلي:
Firebase CLI
استخدِم الأمر firebase firestore:backups:delete:
firebase firestore:backups:delete \
BACKUP
استبدِل ما يلي:

استعادة البيانات من نسخة احتياطية من قاعدة بيانات

تكتب عملية الاستعادة البيانات من نسخة احتياطية إلى قاعدة بيانات Cloud Firestore جديدة.

لبدء عملية استعادة، استخدِم إحدى الطرق التالية:

gcloud
استخدِم الأمر gcloud firestore databases restore:
gcloud firestore databases restore \
--source-backup=projects/PROJECT_ID/locations/LOCATION/backups/BACKUP_ID \
--destination-database='DATABASE_ID'
استبدِل ما يلي:
  • PROJECT_ID: رقم تعريف مشروعك.
  • LOCATION: مكان النسخة الاحتياطية من قاعدة البيانات وموقع قاعدة البيانات الجديدة التي تم إنشاؤها للبيانات التي تمت استعادتها.
  • BACKUP_ID: رقم تعريف نسخة احتياطية. يمكنك الاطّلاع على رقم تعريف كل نسخة احتياطية عند عرض قائمة بجميع النُسخ الاحتياطية.
  • DATABASE_ID: رقم تعريف قاعدة بيانات الجديدة. لا يمكنك استخدام معرّف قاعدة بيانات قيد الاستخدام.
ستتضمّن النتائج مكوّنات metadata وname و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
  ...
يحتوي الحقل metadata على مكوّن progressPercentage يوضّح بالتفصيل مستوى التقدّم المقدَّر لعملية الاستعادة حتى الآن، وoperationState يحدّد الحالة العامة لعملية الاستعادة. لاسترداد هذه المعلومات مرة أخرى، استخدِم gcloud firestore operations list:
gcloud firestore operations list --database=DATABASE_ID
أو باستخدام الحقل name من الإخراج الموضّح أعلاه، مع gcloud firestore operations describe:
gcloud firestore operations describe OPERATION_NAME
Firebase CLI
استخدِم الأمر firebase firestore:databases:restore:
firebase firestore:databases:restore \
--backup 'BACKUP' \
--database 'DATABASE_ID'
استبدِل ما يلي:
  • BACKUP: اسم المورد الكامل لنسخة احتياطية يمكنك عرض اسم كل نسخة احتياطية عند إدراج جميع النُسخ الاحتياطية.
  • DATABASE_ID: رقم تعريف قاعدة بيانات الجديدة. لا يمكنك استخدام معرّف قاعدة بيانات قيد الاستخدام من قبل.