Восстановление в режиме Point in Time Recovery (PITR)
-
Определите лидера кластера Patroni командой, выполненной от пользователя
postgres
на клиенте, входящем в кластер.patronictl -d etcd://адрес_хоста_etcd list patroni_cluster_1
-
Отключите элементы кластера с ролью replica.
-
Отключите элемент кластера с ролью leader.
-
Запустите процесс восстановления без развертывания в каталог для восстановления на клиенте с ролью leader.
-
После завершения задачи по восстановлению скопируйте файлы из каталога для восстановления в целевые каталоги:
-
из каталога для восстановления
/restore_dir/number.rest/var/lib/postgresql/11/main
(гдеnumber
— номер резервной копии) в/var/lib/postgresql/11/main
, предварительно удалив файлы из целевого каталога; -
из каталога для восстановления
/restore_dir/number.rest/opt/rubackup/mnt/postgresql_archives
(гдеnumber
— номер резервной копии) WAL-файлы в/opt/rubackup/mnt/postgresql_archives/
.
-
-
Убедитесь, что у скопированных файлов назначены владелец и группа
postgres
. -
На клиенте с ролью leader от пользователя
postgres
удалите кластер командой:patronictl -c /etc/patroni/config.yml remove patroni_cluster_1
Подтвердите удаление кластера: на первый запрос введите имя кластера, на второй запрос ввести
Yes I am aware
.Пример 1. Подтверждение удаления кластера+--------+------+------+-------+----+-----------+ | Member | Host | Role | State | TL | Lag in MB | + Cluster: patroni_cluster_l (715859822136041482+ +--------+------+------+-------+----+-----------+ Please confirm the cluster name to remove: patroni_cluster_l You are about to remove all information in DCS for patroni_cluster_l, please type: "Yes I am aware": Yes I am aware
-
Запустите элемент кластера на клиенте с ролью leader.
-
Запустите элементы кластера на клиенте с ролью replica.
-
Убедитесь, что все элементы имеют статус running (от имени пользователя
postgres
на клиенте, входящем в кластер).patronictl -d etcd://адрес_хоста_etcd list patroni_cluster_1
-
Отключите элементы кластера с ролью replica.
-
Отключите элемент кластера с ролью leader.
-
Повторно скопируйте файлы из каталога для восстановления
/restore_dir/number.rest/var/lib/postgresql/11/main
(гдеnumber
— номер резервной копии) в/var/lib/postgresql/11/main
, предварительно удалив файлы из целевого каталога. -
В файле
postgresql.conf
установите значение параметруrecovery_target_time
='2023-03-27 15:29:00'
и закомментируйте остальные параметрыrecovery_target*
, если они не используются.Пример 2. Редактирование файлаpostgresql.conf
# recovery_target = ' ' # recovery_target_lsn = '' # recovery_target_name = '' recovery_target_time = '2023-03-27 15:29:00' # recovery_target_timeline = 'latest' # recovery_target_xid = ''
-
В файле
postgresql.auto.conf
установите параметрыrestore_command
,recovery_target_time
,recovery_target_action
.Пример 3. Редактирование файлаpostgresql.auto.conf
recovery_target_time = '2023-03-27 15:29:00' recovery_target_action='promote' restore_command = 'cp /opt/rubackup/mnt/postgresql_archives/%f %p'
-
Запустите СУБД.
sudo -u postgres путь_к_bin/postgres -D путь_к_data_содержащей_конфиг_файлы
Пример 4. Запуск PostgreSQLsudo -u postgres /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data/patroni_cluster_1/data/
-
После успешного запуска СУБД проверьте в логах, что СУБД готова принимать подключения.