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

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

примечание

Исполнять сценарий необходимо от имени пользователя 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, и повторно примените команду размонтирования.