Перейти к основному содержимому

pgBackRest

Последнее изменение:

pgBackRest — инструмент для резервного копирования PostgreSQL с поддержкой S3 для ОС Linux.

Настроить pgBackRest

  1. Настройте доступ к S3.
  2. Настройте PostgreSQL для архивирования WAL.
  3. Установите pgBackRest.
  4. Создайте конфигурацию и настройте бэкапирование.

1. Настроить доступ к S3

Настроить доступ может Владелец аккаунта или пользователь с ролью iam_admin.

  1. Создайте сервисного пользователя с ролью с доступом в S3. Если вы создали сервисного пользователя с ролью object_storage_user или s3.bucket.user, в бакете должна быть настроена политика доступа.
  2. Выдайте пользователю S3-ключ.

2. Настроить PostgreSQL для архивирования WAL

  1. Откройте CLI.

  2. Откройте файл postgresql.conf:

    sudo nano /etc/postgresql/16/main/postgresql.conf
  3. Установите значения параметров:

    wal_level = replica
    archive_mode = on
    archive_command = 'pgbackrest --stanza=main archive-push %p'
    max_wal_senders = 3
  4. Удалите # перед каждым из перечисленных параметров и комментарии после них.

  5. Чтобы выйти из текстового редактора nano с сохранением изменений, нажмите Ctrl+ХY+Enter.

  6. Примените изменения:

    sudo systemctl restart postgresql

3. Установить pgBackRest

Установите pgBackRest:

sudo apt install -y pgbackrest

4. Создать конфигурацию и настроить бэкапирование

  1. Cоздайте каталог конфигураций:

    sudo mkdir -p /etc/pgbackrest
  2. Откройте конфигурационный файл /etc/pgbackrest.conf:

    nano /etc/pgbackrest.conf
  3. Заполните файл /etc/pgbackrest.conf:

    [main]
    pg1-path=/var/lib/postgresql/<postgresql_version>/main

    [global]
    repo1-type=s3
    repo1-s3-endpoint=<s3_domain>
    repo1-s3-bucket=<bucket_name>
    repo1-s3-region=<pool>
    repo1-s3-key=<access_key>
    repo1-s3-key-secret=<secret_key>
    repo1-path=<path_to_repository>
    repo1-retention-full=<number_of_backups>
    log-level-console=info

    Укажите:

    • <postgresql_version> – каталог данных PostgreSQL;
    • <s3_domain>домен S3 API, зависит от пула, в котором находится S3;
    • <bucket_name> – название бакета S3. У бакета должна быть vHosted-адресация;
    • <pool>пул, в котором находится S3;
    • <access_key> – начение поля Access key из S3-ключа;
    • <secret_key> – значение поля Secret key из S3-ключа;
    • <path_to_repository> – корень репозитория pgBackRest;
    • <number_of_backups> – количество одновременно хранящихся бэкапов.
  4. Чтобы выйти из текстового редактора nano с сохранением изменений, нажмите Ctrl+ХY+Enter.

  5. Сделайте владельцем конфигурации пользователя postgres:

    sudo chown -R postgres:postgres /var/lib/pgbackrest
    sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf
  6. Инициализируйте stanza – логическую единицу для pgBackRest, которая объединяет кластер и репозиторий:

    sudo -u postgres pgbackrest --stanza=main --log-level-console=info stanza-create
    sudo -u postgres pgbackrest --stanza=main --log-level-console=info check

    Здесь:

    • stanza-create — проверяет каталог данных и репозиторий, создает метаданные для бэкапа;
    • check — подтверждает корректность настройки.

Работа с pgBackRest

Создать полный бэкап

  1. Откройте CLI.

  2. Создайте полный бэкап:

    sudo -u postgres pgbackrest --stanza=main --type=full backup

Создать инкрементальный бэкап

Для выполнения инкрементального бэкапа должен быть сделан хотя бы один полный бэкап.

  1. Откройте CLI.

  2. Создайте инкрементальный бэкап:

    sudo -u postgres pgbackrest --stanza=main --type=incr --log-level-console=info backup

Посмотреть информацию о сохраненных бэкапах

  1. Откройте CLI.

  2. Посмотрите информацию о сохраненных бэкапах:

    sudo -u postgres pgbackrest --stanza=main info

Восстановить кластер из бэкапа

  1. Откройте CLI.

  2. Перед восстановлением кластера остановите работу PostgreSQL:

    sudo systemctl stop postgresql
  3. Восстановите бэкап — автоматически выбирается последний созданный бэкап:

    sudo -u postgres pgbackrest --stanza=main restore
  4. Запустите работу PostgreSQL:

    sudo systemctl start postgresql
  5. Проверьте список кластеров:

    sudo pg_lsclusters
  6. Проверьте список баз данных:

    sudo -u postgres psql -c "\l"