Настройка копируемого кластера баз данных для использования pg_probackup

Для выполнения резервного копирования в защищённом режиме необходимо создать роль с ограниченными правами и базу данных резервного копирования. Имя роли, базы данных и пароль условны и могут быть изменены по усмотрению пользователя.

  1. Создайте базу данных резервного копирования. Данная операция производится от имени пользователя postgres:

    su postgres
    createdb backupdb
  2. Далее описан процесс создания роли для выполнения резервного копирования. В целях обеспечения безопасности копируемых данных, создаваемая роль будет обладать минимальными правами, необходимыми для выполнения резервного копирования экземпляра Postgres Pro. В этом примере такой ролью будет rubackup_backuper.

    1. Выполните подключение к базе данных backupdb от имени пользователя postgres:

      sudo -u postgres psql -d backupdb
    2. В psql создайте роль rubackup_backuper и задайте пароль, а также задайте разрешения (только в базе данных, к которой производится подключение).

      Пример 1. Создание ролей и задание разрешений в Postgres Pro 15
      BEGIN;
      CREATE ROLE rubackup_backuper WITH LOGIN;
      ALTER USER rubackup_backuper WITH PASSWORD '12345';
      GRANT USAGE ON SCHEMA pg_catalog TO rubackup_backuper;
      GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO rubackup_backuper;
      GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO rubackup_backuper;
      GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO rubackup_backuper;
      GRANT EXECUTE ON FUNCTION pg_catalog.pg_backup_start(text, boolean) TO rubackup_backuper;
      GRANT EXECUTE ON FUNCTION pg_catalog.pg_backup_stop(boolean) TO rubackup_backuper;
      GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO rubackup_backuper;
      GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_wal() TO rubackup_backuper;
      GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_wal_replay_lsn() TO rubackup_backuper;
      GRANT EXECUTE ON FUNCTION pg_catalog.txid_current() TO rubackup_backuper;
      GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO rubackup_backuper;
      GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO rubackup_backuper;
      GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_checkpoint() TO rubackup_backuper;
      ALTER ROLE rubackup_backuper WITH REPLICATION;
      COMMIT;
  3. Создайте файл .pgpass в домашнем каталоге пользователя, указанного в параметре postgresql_admin в конфигурационном файле модуля. В файле .pgpass укажите данные для подключения к ранее созданной базе данных и для репликации.

    Это распространённый способ хранения информации о соединении в PostgreSQL вместо ввода пароля при каждой совершённой операции с pg_probackup. Этот файл должен содержать строки в таком формате:

    сервер:порт:база_данных:имя_пользователя:пароль
    Пример 2. Пример файла .pgpass
    localhost:5432:backupdb:rubackup_backuper:12345
    localhost:5432:replication:rubackup_backuper:12345

    Файл .pgpass обязательно должен находиться в домашнем каталоге пользователя, указанного в параметре postgresql_admin в конфигурационном файле модуля.

    Маска разрешений файла должна соответствовать маске 0600.

  4. Далее необходимо произвести изменения в файле pg_hba.conf. Найти конфигурационный файл, относящийся к настраиваемому кластеру, можно так:

    sudo -u postgres psql
    psql -c 'show hba_file'

    Вызовите psql при помощи команды:

    sudo -u postgres psql

    Если для пользователя postgres не установлен пароль, установите его, изменив 12345 на подходящий:

    alter user postgres with password `12345`;

    В конец файла pg_hba.conf добавьте следующие строки:

    host backupdb rubackup_backuper 127.0.0.1/32 md5
    host replication rubackup_backuper 127.0.0.1/32 md5

    При использовании HAProxy, необходимо в файл pg_hba.conf добавить следующие строки:

    host backupdb rubackup_backuper <IP-адрес хоста HAProxy> md5
    host replication rubackup_backuper <IP-адрес хоста HAProxy> md5

    Вместо peer везде установите md5. Выполните повторную загрузку конфигурации БД или перезапустите СУБД.

    psql -c 'select * from pg_hba_file_rules'
    
    psql -c 'select pg_reload_conf()'

Теперь модуль может выполнять полное резервное копирование и инкрементальное резервное копирование в режиме DELTA, используя режим доставки WAL по умолчанию (ARCHIVE).