Как выполнить резервное копирование и восстановление данных

Относится к версиям Firestore Standard и Firestore Enterprise.

На этой странице описано, как использовать функцию резервного копирования по расписанию в Cloud Firestore. Резервные копии позволяют защитить данные от повреждения на уровне приложения или случайного удаления.

Вы можете настроить расписание резервного копирования, чтобы ежедневно или еженедельно создавать резервные копии указанной базы данных. Затем вы можете использовать эти резервные копии для восстановления данных в новой базе данных.

О резервном копировании

Резервная копия – это согласованная копия базы данных на определенный момент времени. Резервная копия содержит все данные и конфигурации индексов на момент ее создания.

Резервная копия не содержит правил срока хранения базы данных. Резервная копия хранится в том же месте, что и исходная база данных.

Резервные копии имеют настраиваемый срок хранения и хранятся до истечения срока хранения или до тех пор, пока вы не удалите резервную копию. При удалении исходной базы данных связанные с ней резервные копии не удаляются автоматически.

Cloud Firestore хранит метаданные, связанные с резервными копиями и расписаниями резервного копирования, относящимися к базе данных. Cloud Firestore хранит эти метаданные до тех пор, пока не истечет срок действия всех резервных копий базы данных или пока они не будут удалены.

Создание или хранение резервных копий не влияет на производительность операций чтения или записи в активной базе данных.

Стоимость

При использовании резервных копий взимается плата за следующее:

  • Объем хранилища, используемый каждой резервной копией.
  • При восстановлении данных плата взимается в зависимости от размера резервной копии.

Подробную информацию и точные тарифы можно найти на странице с ценами.

Подготовка

Для использования этой функции требуется тарифный план Blaze.

Необходимые роли

Чтобы получить разрешения, необходимые для управления резервными копиями и расписаниями резервного копирования, попросите администратора назначить вам одну или несколько из следующих ролей Identity and Access Management:

  • roles/datastore.owner: полный доступ к базе данных Cloud Firestore.
  • roles/datastore.backupsAdmin: доступ к резервным копиям для чтения и записи
  • roles/datastore.backupsViewer: доступ к резервным копиям в режиме чтения.
  • roles/datastore.backupSchedulesAdmin: доступ на чтение и запись к расписаниям резервного копирования.
  • roles/datastore.backupSchedulesViewer: доступ на чтение к расписаниям резервного копирования.
  • roles/datastore.restoreAdmin: разрешения на запуск операций восстановления

Как создавать расписания резервного копирования и управлять ими

Ниже приведены примеры настройки расписания резервного копирования. Для каждой базы данных можно настроить до одного ежедневного и до одного еженедельного расписания резервного копирования. Вы не можете настроить несколько еженедельных резервных копирований на разные дни недели.

Вы не можете настроить точное время резервного копирования. Резервные копии создаются в разное время каждый день. Для еженедельного резервного копирования можно настроить день недели, в который будет создаваться резервная копия.

Как создать расписание резервного копирования

Чтобы создать расписание резервного копирования, воспользуйтесь одним из следующих инструментов.

Создайте расписание ежедневного резервного копирования

Консоль Google Cloud
  1. В консоли Google Cloud перейдите на страницу Databases (Базы данных).

    Перейти к базам данных

  2. В списке баз данных найдите нужную строку. В столбце Резервное копирование по расписанию нажмите Посмотреть резервные копии или Изменить настройки в зависимости от того, существует ли расписание резервного копирования.
  3. Нажмите Изменить, чтобы изменить настройки аварийного восстановления.
  4. Установите флажок Ежедневно, задайте срок хранения и нажмите Сохранить.
интерфейс командной строки Firebase
Чтобы создать расписание резервного копирования для базы данных, используйте команду firebase firestore:databases:backups:schedules:create. Чтобы создать расписание ежедневного резервного копирования, установите для флага --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 недель).

Создайте еженедельное расписание резервного копирования

Консоль Google Cloud
  1. В консоли Google Cloud перейдите на страницу Databases (Базы данных).

    Перейти к базам данных

  2. В списке баз данных найдите нужную строку. В столбце Резервное копирование по расписанию нажмите Посмотреть резервные копии или Изменить настройки в зависимости от того, существует ли расписание резервного копирования.
  3. Нажмите Изменить, чтобы изменить настройки аварийного восстановления.
  4. Установите флажок Еженедельно, выберите день резервного копирования, задайте срок хранения и нажмите Сохранить.
интерфейс командной строки Firebase
Чтобы создать еженедельное расписание резервного копирования, установите для флага --recurrence значение WEEKLY и выберите --day-of-week:
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 – суббота.

Как посмотреть расписание резервного копирования

Чтобы посмотреть все расписания резервного копирования для базы данных, воспользуйтесь одним из следующих способов:

Консоль Google Cloud
  1. В консоли Google Cloud перейдите на страницу Databases (Базы данных).

    Перейти к базам данных

  2. В списке баз данных найдите нужную строку. В столбце Резервное копирование по расписанию нажмите Посмотреть резервные копии или Изменить настройки в зависимости от того, существует ли расписание резервного копирования.
  3. Откроется страница Аварийное восстановление. На этой странице описаны расписания резервного копирования и перечислены доступные резервные копии.
интерфейс командной строки Firebase
Используйте команду firebase firestore:backups:schedules:list.
firebase firestore:backups:schedules:list \
--database 'DATABASE_ID'
Замените DATABASE_ID идентификатором базы данных. Для базы данных по умолчанию используйте '(default)'.

Опишите расписание резервного копирования

Чтобы получить информацию о расписании резервного копирования, используйте один из следующих методов:

Консоль Google Cloud
  1. В консоли Google Cloud перейдите на страницу Databases (Базы данных).

    Перейти к базам данных

  2. В списке баз данных найдите нужную строку. В столбце Резервное копирование по расписанию нажмите Посмотреть резервные копии или Изменить настройки в зависимости от того, существует ли расписание резервного копирования.
  3. Откроется страница Аварийное восстановление. На этой странице описаны расписания резервного копирования и перечислены доступные резервные копии.
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: идентификатор расписания резервного копирования. Идентификаторы расписаний можно посмотреть в списке всех расписаний резервного копирования.

Как изменить расписание резервного копирования

Чтобы изменить срок хранения расписания резервного копирования, воспользуйтесь одним из следующих способов:

Консоль Google Cloud
  1. В консоли Google Cloud перейдите на страницу Databases (Базы данных).

    Перейти к базам данных

  2. В списке баз данных найдите нужную строку. В столбце Резервное копирование по расписанию нажмите Посмотреть резервные копии или Изменить настройки.
  3. Нажмите Изменить, чтобы изменить настройки аварийного восстановления.
  4. Измените настройки расписания резервного копирования и нажмите Сохранить.
интерфейс командной строки Firebase
Используйте команду firebase firestore:backups:schedules:update:
firebase firestore:backups:schedules:update \
BACKUP_SCHEDULE \
--retention RETENTION_PERIOD
Замените следующее:
  • BACKUP_SCHEDULE: полное название ресурса расписания резервного копирования. Названия расписаний можно посмотреть, выведя их список.
  • RETENTION_PERIOD: задайте значение до 14 недель (14w).

Вы можете изменить срок хранения расписания резервного копирования, но не его периодичность. Если вам нужно расписание резервного копирования с другой периодичностью, удалите старое расписание, если оно больше не требуется, и создайте новое с нужной периодичностью.

Как удалить расписание резервного копирования

Чтобы удалить расписание резервного копирования, воспользуйтесь одним из следующих способов:

Консоль Google Cloud
  1. В консоли Google Cloud перейдите на страницу Databases (Базы данных).

    Перейти к базам данных

  2. В списке баз данных найдите нужную строку. В столбце Резервное копирование по расписанию нажмите Посмотреть резервные копии или Изменить настройки в зависимости от того, существует ли расписание резервного копирования.
  3. Нажмите Изменить, чтобы изменить настройки аварийного восстановления.
  4. Измените настройки расписания резервного копирования и нажмите Сохранить.
интерфейс командной строки Firebase
Используйте команду firebase firestore:backups:schedules:delete:
firebase firestore:backups:schedules:delete \
BACKUP_SCHEDULE
Замените следующее:
  • BACKUP_SCHEDULE – полное название ресурса расписания резервного копирования. Названия расписаний можно посмотреть, выведя их список.

Обратите внимание, что удаление расписания резервного копирования не приведет к удалению резервных копий, уже созданных по этому расписанию. Вы можете дождаться, пока срок хранения резервных копий истечет, или удалить их вручную.

Управление резервным копированием

Получение списка резервных копий

Чтобы посмотреть список доступных резервных копий, воспользуйтесь одним из следующих способов:

Консоль Google Cloud
  1. В консоли Google Cloud перейдите на страницу Databases (Базы данных).

    Перейти к базам данных

  2. В списке баз данных найдите нужную строку. В столбце Резервное копирование по расписанию нажмите Посмотреть резервные копии или Изменить настройки в зависимости от того, существует ли расписание резервного копирования.
  3. Нажмите Изменить, чтобы изменить настройки аварийного восстановления.
  4. Измените настройки расписания резервного копирования и нажмите Сохранить.
интерфейс командной строки Firebase
Используйте команду firebase firestore:backups:list:
firebase firestore:backups:list
Чтобы получить список резервных копий только из определенного местоположения, используйте флаг --location:
firebase firestore:backups:list \
--location=LOCATION
Замените LOCATION на название местоположения Cloud Firestore.

Опишите резервную копию

Чтобы посмотреть сведения о резервной копии, воспользуйтесь одним из следующих способов:

Консоль Google Cloud
  1. В консоли Google Cloud перейдите на страницу Databases (Базы данных).

    Перейти к базам данных

  2. В списке баз данных найдите нужную строку. В столбце Резервное копирование по расписанию нажмите Посмотреть резервные копии или Изменить настройки в зависимости от того, существует ли расписание резервного копирования.
  3. Откроется страница Аварийное восстановление. На этой странице описаны расписания резервного копирования и перечислены доступные резервные копии.
интерфейс командной строки Firebase
Используйте команду firebase firestore:backups:get:
firebase firestore:backups:get BACKUP
Замените следующее:

Удалить резервную копию

Чтобы удалить резервную копию, воспользуйтесь одним из способов ниже.

Консоль Google Cloud
  1. В консоли Google Cloud перейдите на страницу Databases (Базы данных).

    Перейти к базам данных

  2. В списке баз данных найдите нужную строку. В столбце Резервное копирование по расписанию нажмите Посмотреть резервные копии или Изменить настройки в зависимости от того, существует ли расписание резервного копирования. Откроется страница Аварийное восстановление. На этой странице описаны расписания резервного копирования и перечислены доступные резервные копии.
  3. В таблице Резервные копии найдите строку с нужной копией и в столбце Действия нажмите Ещё . Выберите Удалить.
  4. Подтвердите действие в текстовом поле и нажмите Удалить.
интерфейс командной строки Firebase
Используйте команду firebase firestore:backups:delete:
firebase firestore:backups:delete \
BACKUP
Замените следующее:
  • BACKUP – полное название ресурса резервной копии. Чтобы посмотреть названия резервных копий, выведите их список.

Как восстановить данные из резервной копии базы данных

При восстановлении данные из резервной копии записываются в новую базу данных Cloud Firestore.

Чтобы начать операцию восстановления, используйте один из следующих методов:

Консоль Google Cloud
  1. В консоли Google Cloud перейдите на страницу Databases (Базы данных).

    Перейти к базам данных

  2. В списке баз данных найдите нужную строку. В столбце Резервное копирование по расписанию нажмите Посмотреть резервные копии или Изменить настройки в зависимости от того, существует ли расписание резервного копирования. Откроется страница Аварийное восстановление. На этой странице описаны расписания резервного копирования и перечислены доступные резервные копии.
  3. В таблице Резервные копии найдите строку с нужной копией и в столбце Действия нажмите Ещё(). Выберите Восстановить с помощью Cloud Shell.
  4. Откроется панель Cloud Shell с командой gcloud CLI для восстановления из выбранной резервной копии. Замените ID_OF_NEW_DATABASE идентификатором базы данных и выполните команду.

    После выполнения команды вы получите ответ с дополнительной информацией об операции. База данных скоро появится в списке баз данных. Восстановление займет некоторое время, и база данных будет недоступна, пока оно не завершится.

интерфейс командной строки Firebase
Используйте команду firebase firestore:databases:restore:
firebase firestore:databases:restore \
--backup 'BACKUP' \
--database 'DATABASE_ID'
Замените следующее:
  • BACKUP – полное название ресурса резервной копии. Название каждой резервной копии можно посмотреть в списке всех резервных копий.
  • DATABASE_ID – идентификатор новой базы данных. Нельзя использовать идентификатор базы данных, который уже используется.

Ограничения

При восстановлении не восстанавливаются данные поиска App Engine и объекты blob из базы данных (default). Эти данные действительны только для базы данных (default) и не будут полезны, если вы восстановите базу данных (default) в базу данных, которая не поддерживает такие данные, поэтому они исключаются из резервных копий.

Что делать после восстановления

После восстановления выполните следующие действия:

  • Убедитесь, что к новой базе данных применены соответствующие элементы управления IAM.

  • Если вы ранее использовали правила TTL, примените их к новой базе данных. Правила TTL не включаются в резервные копии и не применяются автоматически к восстановленным базам данных.