+7 495 230 03 03 8 800 222 50 03

Восстановление бэкапа в новый кластер PostgreSQL

Версия ОС: Debian GNU/Linux 11 Версия СУБД: PostgreSQL 13.7 Порой возникают ситуации, при которых использование привычных утилит снятия и восстановления бэкапов в 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 инициализируем новый кластер:
initdb -D /var/lib/pgpro/1c-13/data-temp1
Восстановление бэкапа в новый кластер PostgreSQL - EFSOL
В файле postgresql.conf меняем порт на любой, отличающийся от занятых:
nano /var/lib/pgpro/1c-13/data-temp1/postgresql.conf
Восстановление бэкапа в новый кластер PostgreSQL - EFSOL

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

И стартуем кластер для проверки работоспособности:
/opt/pgpro/1c-13/bin/pg_ctl -D /var/lib/pgpro/1c-13/data-temp1 start
Восстановление бэкапа в новый кластер PostgreSQL - EFSOL

Остановка кластера и восстановление данных

После того, как убедились, что новый кластер запускается корректно, останавливаем его работу и начинаем восстановление данных:
/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
И записываем с заменой в нужную нам директорию /var/lib/pgpro/1c-13/data-temp1 :
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 завершены. Осталось подключиться к данной БД и проверить актуальность данных.

Не нашли ответа на свой вопрос?

Смотрите также

Содержание

Заказать звонок

Оставьте свои данные для того, чтобы специалист с вами связался.

*нажимая на кнопку, Вы даете согласие на обработку персональных данных
Быстрое внедрение включает:
На сервере установлено следующее ПО (доступно при подключении по протоколу RDP):
Также настроено:
Перед внедрением клиент предоставляет информацию о пользователях (логины и пароли). После завершения работ, клиенту высылается инструкция и ярлык для подключения.
Индивидуальное внедрение по ТЗ клиента обсуждается отдельно.