Восстановление в режиме Point in Time Recovery (PITR)

  1. Определите лидера кластера Patroni командой, выполненной от пользователя postgres на клиенте, входящем в кластер.

    patronictl -d etcd://адрес_хоста_etcd list patroni_cluster_1
  2. Отключите элементы кластера с ролью replica.

  3. Отключите элемент кластера с ролью leader.

  4. Запустите процесс восстановления без развертывания в каталог для восстановления на клиенте с ролью leader.

  5. После завершения задачи по восстановлению скопируйте файлы из каталога для восстановления в целевые каталоги:

    • из каталога для восстановления /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/.

  6. Убедитесь, что у скопированных файлов назначены владелец и группа postgres.

  7. На клиенте с ролью 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
  8. Запустите элемент кластера на клиенте с ролью leader.

  9. Запустите элементы кластера на клиенте с ролью replica.

  10. Убедитесь, что все элементы имеют статус running (от имени пользователя postgres на клиенте, входящем в кластер).

    patronictl -d etcd://адрес_хоста_etcd list patroni_cluster_1
  11. Отключите элементы кластера с ролью replica.

  12. Отключите элемент кластера с ролью leader.

  13. Повторно скопируйте файлы из каталога для восстановления /restore_dir/number.rest/var/lib/postgresql/11/main (где number — номер резервной копии) в /var/lib/postgresql/11/main, предварительно удалив файлы из целевого каталога.

  14. В файле 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 = ''
  15. В файле 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'
  16. Запустите СУБД.

    sudo -u postgres путь_к_bin/postgres -D путь_к_data_содержащей_конфиг_файлы
    Пример 4. Запуск PostgreSQL
    sudo -u postgres /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data/patroni_cluster_1/data/
  17. После успешного запуска СУБД проверьте в логах, что СУБД готова принимать подключения.