Перейти к основному содержимому

Гранулярное восстановление базы данных

примечание

Исполнять сценарий необходимо от имени пользователя postgres.

Описание сценария​

Процедура частичного восстановления объектов базы данных до согласованного состояния на заданный момент времени, осуществляемая без полной остановки рабочего экземпляра СУБД и не требующая восстановления всей совокупности данных. В сценарии рассматривается процесс восстановления отдельной таблицы из ранее сделанной резервной копии с помощью технологии copywala fuse и утилиты pg_dump.

Последовательность выполнения​

  1. Остановите текущий кластер:

    pg_ctl stop
  2. Создайте директорию для монтирования CWL-архива:

    mkdir /path/to/cwl_archive_mount_point
  3. Запустите сценарий:

    $ copywala fuse /path/to/cwl_archive_mount_point <archive uri or path>

    Где archive uri – это URI для доступа к архиву в облачных хранилищах типа S2/S3, path – путь к локальному файлу.

  4. После запуска терминал заблокируется и в журнале появится запись:

    INF start fuse mounting mount_path=<mount-dir> cache_swap_size=268435456 cache_dir=/tmp
  5. Откройте новый отдельный терминал и запустите экземпляр PostgreSQL на смонтированном каталоге:

    pg_ctl start -D <mount-dir>
  6. Убедитесь, что сервер успешно запущен, проверяя доступ к данным через консоль psql, выполнив простой запрос к необходимой таблице.

  7. Выйдите из сессии psql и создайте дамп выбранной таблицы:

    pg_dump -U <username> -d <database> -t <schema.table_name> > dump.sql
    к сведению

    Обратите внимание, что скорость работы pg_dump на файловом слое FUSE существенно ниже по сравнению с локальной системой хранения, так как данные считываются непосредственно из архива. Процесс займет значительное время, около 40 минут для таблицы размером примерно 9 ГБ.

  8. Подключитесь к целевому экземпляру PostgreSQL, где планируется восстановление таблицы, и импортируйте сохраненный дамп:

    psql -U <username> <database> < dump.sql
  9. Завершите работу с файлом системы FUSE:

    • Остановите запущенную копию PostgreSQL:

      pg_ctl stop -D <mount-dir>
    • Вернитесь к окну терминала, где была выполнена команда copywala fuse, и завершите ее выполнение.

Результат​

В результате успешной операции будет создана полная копия структуры и всех данных указанной таблицы в файле dump.sql.

Исключительные сценарии​

  • Ошибка монтирования файловой системы FUSE: недостаточно прав на создание или монтирование каталога, неверно указан путь к директории, недостаточное количество оперативной памяти или места на диске.

    Решение: убедитесь, что указан корректный путь к директории, операция выполняется от имени суперпользователя либо пользователя с достаточными правами доступа. Освободите необходимое пространство или увеличьте лимит памяти.

  • Ошибка размонтирования файловой системы FUSE:

    Решение: принудительно завершите приложение, использующее систему FUSE, и повторно примените команду размонтирования.