Порой возникают ситуации, при которых использование привычных утилит снятия и восстановления бэкапов в PostgreSQL, таких как pg_dump, pg_dumpall, pg_restore или с помощью pgAdmin, не представляется возможным. Например, это может случиться при особенностях структуры некоторых таблиц в самописной конфигурации.
В таких случаях используется утилита pg_basebackup.
Утилитой pg_basebackup можно выполнять резервное копирование работающего кластера баз данных PostgreSQL. Результирующий бинарный файл можно использовать для репликации или восстановления на определенный момент в прошлом. Утилита создает резервную копию всего экземпляра базы данных и не дает возможности создавать слепки данных отдельных сущностей. Подключение pg_basebackup к PostgreSQL выполняется при помощи протокола репликации с полномочиями суперпользователя или с правом REPLICATION.
В конкретном примере рассмотрим задачу, в которой требуется развернуть новую БД и восстановить в нее копию существующей базы данных.
Создание резервного копирования
Для выполнения резервного копирования локальной базы будем использовать команду:pg_basebackup -Xf -Ft -U postgres -w -D - | lbzip2 -n 6 -9 > /mnt/backup/work_backup_18.10.24.tar.bz2
- -Xf — указывает, что для создания резервной копии будут использованы репликационные слоты (на уровне транзакций).
- -Ft — указывает формат создаваемого архива.
- -U postgres — указывает имя пользователя PostgreSQL, от имени которого будет выполняться резервное копирование (в данном случае это postgres ).
- -w — отключает запрос пароля для пользователя postgres . Используется, если аутентификация пользователя настроена и не требуется ввод пароля.
- -D — указывает на вывод данных резервного копирования в стандартный вывод.
Настройка нового кластера
Далее необходимо создать и настроить новый кластер, в котором будет развернута копия нужной нам базы.
Создаем каталоги, назначаем права:
mkdir -p /var/lib/pgpro/1c-13/data-temp1
chown postgres:postgres /var/lib/pgpro/1c-13/data-temp1
chmod 750 /var/lib/pgpro/1c-13/data-temp1
initdb -D /var/lib/pgpro/1c-13/data-temp1
nano /var/lib/pgpro/1c-13/data-temp1/postgresql.conf
Старт нового кластера для проверки
И стартуем кластер для проверки работоспособности:/opt/pgpro/1c-13/bin/pg_ctl -D /var/lib/pgpro/1c-13/data-temp1 start
Остановка кластера и восстановление данных
Убедившись, что новый кластер запускается корректно, останавливаем его работу и начинаем восстановление данных:/opt/pgpro/1c-13/bin/pg_ctl -D /var/lib/pgpro/1c-13/data-temp1 stop
lbzip2 -d /mnt/backup/work_backup_18.10.24.tar.bz2
tar -xvf /mnt/backup/work_backup_18.10.24.tar -C /var/lib/pgpro/1c-13/data-temp1 --overwrite
ВАЖНО!!! Данные конфигурации нового кластера лежат в самом кластере, поэтому после перезаписи в файле postgresql.conf будут данные восстанавливаемого кластера. Иными словами, необходимо проверить и поменять значения порта, на котором будет работать data-temp1:
nano /var/lib/pgpro/1c-13/data-temp1/postgresql.conf
Запуск кластера после восстановления
После этого снова стартуем кластер:/opt/pgpro/1c-13/bin/pg_ctl -D /var/lib/pgpro/1c-13/data-temp1 start
Нужна помощь? Мы оказываем услуги администрирование PostgreSQL и миграция 1С с MS SQL на PostgreSQL под ключ. Также возможны разовые проектные работы.