Настройка PostgreSQL
1. Подготовка к использованию модулей резервного копирования
Для выполнения резервного копирования баз данных и таблиц при помощи СРК RuBackup в СУБД выполните следующие действия:
-
Убедитесь, что утилита
psqlрасполагается в каталоге/usr/bin. Еслиpsqlрасполагается в другом каталоге, то создайте в каталоге/usr/binсимвольную ссылку на утилиту:ln -s /<путь_до_утилиты>/psql /usr/bin/psql -
Создайте роль RuBackup (например,
rubackup_backuper) (см. Раздел 1.1). -
Создайте базу данных для выполнения процедур резервного копирования (например,
backupdb) (см. Раздел 1.2). -
Выполните настройку конфигурации сервера PostgreSQL (см. Раздел 1.3).
-
Включите расширение
dblinkдля роли RuBackup (см. Раздел 1.4).
1.1. Создание роли RuBackup
Для безопасного выполнения операций с базами данных и таблицами необходимо создать роль с ограниченным набором прав.
-
Подключитесь к СУБД от имени администратора:
sudo -u postgres psql -
Создайте роль RuBackup:
CREATE ROLE <название_роли> WITH LOGIN password '12345'; (1)1 Вместо 12345укажите желаемый пароль.
1.2. Создание специальной базы данных
Для того, чтобы у ранее созданного пользователя была точка входа, создайте отдельную базу данных.
-
Подключитесь к СУБД от имени администратора:
sudo -u postgres psql -
Создайте базу данных:
CREATE DATABASE <название_БД>; -
Назначьте ранее созданную роль владельцем базы данных:
ALTER DATABASE <название_БД> OWNER TO <название_роли>;
1.3. Настройка конфигурации сервера PostgreSQL
Для подготовки СУБД PostgreSQL к выполнению резервного копирования при помощи СРК RuBackup:
-
Установите метод подключения
peerдля пользователяpostgresв файлеpg_hba.conf:local all postgres peer -
Установите для роли RuBackup метод подключения
md5в файлеpg_hba.conf. Данный метод должен распространяться только на ранее созданную базу данных:host backupdb rubackup_backuper 127.0.0.1/32 md5 -
Чтобы изменения вступили в силу без перезагрузки сервера:
-
Проверьте файл на наличие опечаток:
psql -c 'SELECT * from pg_hba_file_rules;' -
Примените изменения:
psql -c ' SELECT pg_reload_conf();'
-
1.4. Включение расширения dblink для роли RuBackup
Для обеспечения безопасности модули используют сквозное подключение к целевой БД, осуществляемое с помощью расширения dblink. Чтобы включить расширение для роли RuBackup выполните подключение к ранее созданной базе данных от имени администратора:
sudo -u postgres psql -d <название_БД> -c 'CREATE EXTENSION dblink;'
2. Управление правами роли RuBackup
Для управления правами роли RuBackup используйте следующие команды:
-
Перед запуском процесса восстановления резервной копии предоставьте пользователю
rubackup_backuperправаsuperuser:ALTER USER rubackup_backuper WITH superuser; -
По завершении восстановления отзовите выданные ранее пользователю
rubackup_backuperправаsuperuser:ALTER USER rubackup_backuper WITH nosuperuser; -
Для выполнения резервного копирования БД, содержащей большие объекты, в файле
postgresql.confустановите значениеonпараметруlo_compat_privileges:lo_compat_privileges = on -
В некоторых случаях роли RuBackup требуется выдать временные права на выполнение команд
SELECTиCREATE. Например, когда восстанавливаемая БД уже существует и необходимо создать ее копию вместо аварийного завершения работы.В СРК RuBackup предусмотрены автоматический и ручной способы выдачи прав роли:
-
Автоматическое управление правами роли на основе SQL-скриптов, заполняемых вручную. Для использования автоматического режима управления правами роли необходимо заполнить скрипт
/opt/rubackup/scripts/rb_pg_dump_script.sql. Пример наполнения:
-
Управление правами роли в ручном режиме при помощи консольной утилиты. При помощи этой утилиты можно выдать права ранее созданному пользователю на выполнение
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
Перед созданием правил и дальнейшей работой с модулями заполните их конфигурационные файлы актуальной информацией:
-
Для резервного копирования отдельной БД заполните параметры файла
/opt/rubackup/etc/rb_module_pg_dump_database.conf:Пример заполнения файла/opt/rubackup/etc/rb_module_pg_dump_database.confbackup_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.
-
Для резервного копирования отдельной таблицы заполните параметры файла
/opt/rubackup/etc/rb_module_pg_dump_table.conf:Пример заполнения файла/opt/rubackup/etc/rb_module_pg_dump_table.confbackup_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).
-
Перезапустите клиент RuBackup:
rubackup_client stop rubackup_client start
В результате клиент должен сообщить о том, что модули rb_module_pg_dump_database и rb_module_pg_dump_table готовы к работе.