Настройка PostgreSQL

1. Подготовка к использованию модулей резервного копирования

Для выполнения резервного копирования баз данных и таблиц при помощи СРК RuBackup в СУБД выполните следующие действия:

  1. Убедитесь, что утилита psql располагается в каталоге /usr/bin. Если psql располагается в другом каталоге, то создайте в каталоге /usr/bin символьную ссылку на утилиту:

    ln -s /<путь_до_утилиты>/psql /usr/bin/psql
  2. Создайте роль RuBackup (например, rubackup_backuper) (см. Раздел 1.1).

  3. Создайте базу данных для выполнения процедур резервного копирования (например, backupdb) (см. Раздел 1.2).

  4. Выполните настройку конфигурации сервера PostgreSQL (см. Раздел 1.3).

  5. Включите расширение dblink для роли RuBackup (см. Раздел 1.4).

1.1. Создание роли RuBackup

Для безопасного выполнения операций с базами данных и таблицами необходимо создать роль с ограниченным набором прав.

  1. Подключитесь к СУБД от имени администратора:

    sudo -u postgres psql
  2. Создайте роль RuBackup:

    CREATE ROLE <название_роли> WITH LOGIN password '12345'; (1)
    1 Вместо 12345 укажите желаемый пароль.

1.2. Создание специальной базы данных

Для того, чтобы у ранее созданного пользователя была точка входа, создайте отдельную базу данных.

  1. Подключитесь к СУБД от имени администратора:

    sudo -u postgres psql
  2. Создайте базу данных:

    CREATE DATABASE <название_БД>;
  3. Назначьте ранее созданную роль владельцем базы данных:

    ALTER DATABASE <название_БД> OWNER TO <название_роли>;

1.3. Настройка конфигурации сервера PostgreSQL

Для подготовки СУБД PostgreSQL к выполнению резервного копирования при помощи СРК RuBackup:

  1. Установите метод подключения peer для пользователя postgres в файле pg_hba.conf:

    local   all             postgres                                peer
  2. Установите для роли RuBackup метод подключения md5 в файле pg_hba.conf. Данный метод должен распространяться только на ранее созданную базу данных:

    host    backupdb        rubackup_backuper       127.0.0.1/32    md5
  3. Чтобы изменения вступили в силу без перезагрузки сервера:

    1. Проверьте файл на наличие опечаток:

      psql -c 'SELECT * from pg_hba_file_rules;'
    2. Примените изменения:

      psql -c ' SELECT pg_reload_conf();'

1.4. Включение расширения dblink для роли RuBackup

Для обеспечения безопасности модули используют сквозное подключение к целевой БД, осуществляемое с помощью расширения dblink. Чтобы включить расширение для роли RuBackup выполните подключение к ранее созданной базе данных от имени администратора:

sudo -u postgres psql -d <название_БД> -c 'CREATE EXTENSION dblink;'

2. Управление правами роли RuBackup

Для управления правами роли RuBackup используйте следующие команды:

  1. Перед запуском процесса восстановления резервной копии предоставьте пользователю rubackup_backuper права superuser:

    ALTER USER rubackup_backuper WITH superuser;
  2. По завершении восстановления отзовите выданные ранее пользователю rubackup_backuper права superuser:

    ALTER USER rubackup_backuper WITH nosuperuser;
  3. Для выполнения резервного копирования БД, содержащей большие объекты, в файле postgresql.conf установите значение on параметру lo_compat_privileges:

    lo_compat_privileges = on
  4. В некоторых случаях роли RuBackup требуется выдать временные права на выполнение команд SELECT и CREATE. Например, когда восстанавливаемая БД уже существует и необходимо создать ее копию вместо аварийного завершения работы.

    В СРК RuBackup предусмотрены автоматический и ручной способы выдачи прав роли:

    • Автоматическое управление правами роли на основе SQL-скриптов, заполняемых вручную. Для использования автоматического режима управления правами роли необходимо заполнить скрипт /opt/rubackup/scripts/rb_pg_dump_script.sql. Пример наполнения:

      2
    • Управление правами роли в ручном режиме при помощи консольной утилиты. При помощи этой утилиты можно выдать права ранее созданному пользователю на выполнение SELECT и CREATE

    Чтобы управлять правами роли в ручном режиме используйте утилиту /opt/rubackup/bin/rb_pg_dump_script:

    /opt/rubackup/scripts/rb_pg_dump_script -1 -U admin_name -p admin_password -B backup_user -H db_host -P db_port -S schema
    -1

    выдает права ранее созданному пользователю на выполнение команд SELECT и CREATE в целевой БД;

    -2

    снимает права ранее созданному пользователю;

    -U admin_name

    имя администратора кластера Postgres;

    -p admin_password

    пароль администратора кластера;

    -B backup_user

    имя пользователя RuBackup;

    -H db_host

    хост сервера базы данных или каталог сокетов;

    -P db_port

    порт базы данных;

    -S schema

    схема БД, к которой принадлежат копируемые таблицы.

    Чтобы отозвать у роли ранее выданные права, запустите утилиту с опцией -2:

    /opt/rubackup/scripts/rb_pg_dump_script -2 -U admin_name -p admin_password -B backup_user -H db_host -P db_port -S schema

3. Завершение подготовки хоста с СУБД PostgreSQL

Перед созданием правил и дальнейшей работой с модулями заполните их конфигурационные файлы актуальной информацией:

  1. Для резервного копирования отдельной БД заполните параметры файла /opt/rubackup/etc/rb_module_pg_dump_database.conf:

    Пример заполнения файла /opt/rubackup/etc/rb_module_pg_dump_database.conf
    backup_user: 'rubackup_backuper'
    password: '12345'
    backup_db: 'backupdb'
    host: 'localhost'
    port: '5432'
    pg_dump: '/usr/bin/pg_dump'
    pg_restore: '/usr/bin/pg_restore'
    backup_user

    имя ранее созданной роли RuBackup;

    password

    пароль роли RuBackup;

    backup_db

    имя базы данных роли RuBackup;

    host

    хост сервера базы данных или каталог сокетов;

    port

    порт базы данных;

    pg_dump

    полный путь к утилите pg_dump;

    pg_restore

    полный путь к утилите pg_restore.

  2. Для резервного копирования отдельной таблицы заполните параметры файла /opt/rubackup/etc/rb_module_pg_dump_table.conf:

    Пример заполнения файла /opt/rubackup/etc/rb_module_pg_dump_table.conf
    backup_user: 'rubackup_backuper'
    password: '12345'
    backup_db: 'backupdb'
    host: 'localhost'
    port: '5432'
    pg_dump: '/usr/bin/pg_dump'
    pg_restore: '/usr/bin/pg_restore'
    backup_user

    имя ранее созданной роли RuBackup;

    password

    пароль роли RuBackup;

    backup_db

    имя базы данных роли RuBackup;

    host

    хост сервера базы данных или каталог сокетов;

    port

    порт базы данных;

    pg_dump

    полный путь к утилите pg_dump;

    pg_restore

    полный путь к утилите pg_restore.

    Во избежание раскрытия пароля роли RuBackup для конфигурационных файлов рекомендуем определить строгие права только для суперпользователя (chmod 0600).

  3. Перезапустите клиент RuBackup:

    rubackup_client stop
    rubackup_client start

В результате клиент должен сообщить о том, что модули rb_module_pg_dump_database и rb_module_pg_dump_table готовы к работе.