Версия ОС: Debian GNU/Linux 11
Версия СУБД: PostgreSQL 13.7
Порой возникают ситуации, при которых использование привычных утилит снятия и восстановления бэкапов в PostgreSQL, таких как pg_dump, pg_dumpall, pg_restore или с помощью pgAdmin, не представляется возможным. Например, это может случиться при особенностях структуры некоторых таблиц в самописной конфигурации.
В таких случаях используется утилита pg_basebackup .
Утилитой pg_basebackup можно выполнять резервное копирование работающего кластера баз данных PostgreSQL. Результирующий бинарный файл можно использовать для репликации или восстановления на определенный момент в прошлом. Утилита создает резервную копию всего экземпляра базы данных и не дает возможности создавать слепки данных отдельных сущностей. Подключение pg_basebackup к PostgreSQL выполняется при помощи протокола репликации с полномочиями суперпользователя или с правом REPLICATION .
В конкретном примере рассмотрим задачу, в которой требуется развернуть новую БД и восстановить в нее копию существующей базы данных.
Где:
Командой initdb инициализируем новый кластер:
В файле postgresql.conf меняем порт на любой, отличающийся от занятых:
Распаковываем существующий бэкап данных:
И записываем с заменой в нужную нам директорию /var/lib/pgpro/1c-13/data-temp1 :
ВАЖНО!!! Данные конфигурации нового кластера лежат в самом кластере, поэтому после перезаписи в файле postgresql.conf будут данные восстанавливаемого кластера. Иными словами, необходимо проверить и поменять значения порта, на котором будет работать data-temp1 :
Работы по восстановлению бэкапа существующей БД в новый кластер PostgreSQL завершены. Осталось подключиться к данной БД и проверить актуальность данных.
Создание резервного копирования
Для выполнения резервного копирования локальной базы будем использовать команду: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
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