Postgres Backup

Материал из PersonallWiki
Перейти к: навигация, поиск

Postgres Backup[править]

Условно методы создания резервных копий в СУБД PostgreSQL можно разделить на два направления: 1) Экспорт в текстовый файл 2) Копирование файлов данных Оба подхода имеют свои преимущества и недостатки.


Направление 1 — экспорт в текстовый файл.[править]

Может работать на любом клиенте с доступом к базе по сети (версия клиента должна быть не меньше версии сервера). На ОС семейства unix вывод текстовых данных может перенаправляться в различные утилиты (архивирования, разбивки на файлы) автоматически. Особенность утилит экспорта для PostgreSQL состоит в том, что нельзя указывать пароль пользователя, от имени которого подключаемся в серверу напрямую в командной строке (для стандартной парольной аутентификации). Для этого придется создавать отдельный файл с параметрами подключения, например так:

для windows:

 echo %pg_host%:%pg_port%:%pg_db%:%pg_user%:%pg_pwd%> %APPDATA%\postgresql\pgpass.conf
где переменные pg_host%:%pg_port%:%pg_db%:%pg_user%:%pg_pwd%
соответственно хост, порт, имя базы, юзер, пароль

для linux:

 echo $pg_host:$pg_port:$pg_db:$pg_user:$pg_pwd>~/pgpass.conf

Запуск команды на выполнение резервной копии базы данных целиком:

 pg_dump -d %pg_db% -h %pg_host%  -p %pg_port%  -U %pg_user% -b -f  %backup_file%
где переменные %pg_db%, pg_host%, %pg_port%, %pg_user%, %backup_file%
соответственно имя базы, хост, порт, юзер, имя файла бэкапа

Запуск команды на выполнение восстановления из резервной копии базы данных:

 psql -U %pg_user% -h %pg_host% -p %pg_port% -d %pg_db% -w -f %backup_file% -L import.log
 где переменные %pg_db%, pg_host%, %pg_port%, %pg_user%, %backup_file%
 соответственно имя базы, хост, порт, юзер, имя файла бэкапа

Направление 2 — экспорт файлов данных.[править]

Все операции производятся на самом сервере БД, либо требуется настраивать доступ к репликации базы в файле pg_hba.conf. Копируется весь кластер БД – т.е. все базы. Лучше всего использовать специализированную утилиту pg_basebackup (ставится отдельно). Для удаленного резервного копирования потребуются дополнительные настройки в конфигурации сервера:

Должна быть включена:

 архивация журналов WAL +
 wal_level =  hot_standby
 max_wal_senders > 0  

Команда на запуск бэкапа кластера БД:

 pg_basebackup  -x  -d postgresql://%pg_user%:%pg_pwd%@%pg_host% -h %pg_host%  -p %pg_port% -U %pg_user% -D %dir% -w

где переменные

 pg_host%, %pg_port%, %pg_user%, %dir%

соответственно

 хост, порт, юзер, имя директории для хранения файлов данных


Направление 3 - Barman[править]

Barman (Backup and Recovery Manager) представляет из себя программу (для Linux/Unix), управляющую получением резервных копий (с помощью WAL) и восстановлением серверов.

Вкратце, функциональность сводится к:

  1. Создание и постоянное обновление бэкапа, причём один Barman сервер может принимать WAL файлы с нескольких PostgreSQL серверов, а один PostgreSQL сервер может архивироваться на несколько территориально разнесённых Barman серверов.
  2. Восстановление нужного бэкапа с указанием имени бэкапа (список возможных вариантов есть), ID транзакции, или указание времени, с требованием восстановить состояние базы точно до или точно после этого времени — то есть можно восстановить базу на любой момент времени.

Лицензия — GNU General Public License 3.

Основные возможности:

  • Полный горячий бэкап сервера
  • Управление несколькими PostgreSQL серверами
  • Удалённое и локальное восстановление PostgreSQL серверов
  • Поддержка SSH для удалённых операций
  • Сжатие WAL файлов
  • Pre/Post хуки
  • Простой формат — INI — конфигурационного файла
  • Point-In-Time-Recovery (PITR)
  • Удалённый бэкап PostgreSQL серверов
  • Управление первоначальными (base, полными копиями) бэкапами и WAL файлами
  • Перемещение PGDATA и tablespaces во время восстановления
  • Общая информация о бэкапах и занимаемом месте
  • Поддержка rsync для синхронизации и перемещения файлов


Приложение[править]

Описание параметров утилиты резервного копирования в текстовый файл pg_dump сохраняет резервную копию БД в текстовом файле или другом виде.

Использование:

 pg_dump [ПАРАМЕТР]... [ИМЯ_БД]

Общие параметры:

 -f, --file=ИМЯ               имя выходного файла или каталога
 -F, --format=c|d|t|p         формат выводимых данных
                              (пользовательский | каталог | tar |
                              текстовый (по умолчанию))
 -j, --jobs=ЧИСЛО             распараллелить копирование на указанное число
                              заданий
 -v, --verbose                режим подробных сообщений
 -V, --version                показать версию и выйти
 -Z, --compress=0-9           уровень сжатия при архивации
 --lock-wait-timeout=ТАЙМАУТ  прервать операцию при таймауте блокировки таблицы
 -?, --help                   показать эту справку и выйти

Параметры, управляющие выводом:

 -a, --data-only              выгрузить только данные, без схемы
 -b, --blobs                  выгрузить также большие объекты
 -c, --clean                  очистить (удалить) объекты БД при восстановлении
 -C, --create                 добавить в копию команды создания базы данных
 -E, --encoding=КОДИРОВКА     выгружать данные в заданной кодировке
 -n, --schema=СХЕМА           выгрузить только указанную схему(ы)
 -N, --exclude-schema=СХЕМА   НЕ выгружать указанную схему(ы)
 -o, --oids                   выгружать данные с OID
 -O, --no-owner               не восстанавливать владение объектами
                              при использовании текстового формата
 -s, --schema-only            выгрузить только схему, без данных
 -S, --superuser=ИМЯ          имя пользователя, который будет задействован
                              при восстановлении из текстового формата
 -t, --table=ТАБЛИЦА          выгрузить только указанную таблицу(ы)
 -T, --exclude-table=ТАБЛИЦА  НЕ выгружать указанную таблицу(ы)
 -x, --no-privileges          не выгружать права (назначение/отзыв)
 --binary-upgrade             только для утилит обновления БД
 --column-inserts             выгружать данные в виде INSERT с именами колонок
 --disable-dollar-quoting     отключить спецстроки с $, выводить строки
                              по стандарту SQL
 --disable-triggers           отключить триггеры при восстановлении
                              только данных, без схемы
 --exclude-table-data=ТАБЛИЦА НЕ выгружать указанную таблицу(ы)
 --inserts                    выгрузить данные в виде команд INSERT, не COPY
 --no-security-labels         не выгружать назначения меток безопасности
 --no-synchronized-snapshots  не использовать синхронизированные снимки
                              в параллельных заданиях
 --no-tablespaces             не выгружать назначения табличных пространств
 --no-unlogged-table-data     не выгружать данные нежурналируемых таблиц
 --quote-all-identifiers      заключать в кавычки все идентификаторы,
                              а не только ключевые слова
 --section=РАЗДЕЛ             выгрузить заданный раздел
                              (pre-data, data или post-data)
 --serializable-deferrable    дождаться момента для выгрузки данных без аномалий
 --use-set-session-authorization
                              устанавливать владельца, используя команды
                              SET SESSION AUTHORIZATION вместо ALTER OWNER

Параметры подключения:

 -d, --dbname=БД          имя базы данных для выгрузки
 -h, --host=ИМЯ           имя сервера баз данных или каталог сокетов
 -p, --port=ПОРТ          номер порта сервера БД
 -U, --username=ИМЯ       имя пользователя баз данных
 -w, --no-password        не запрашивать пароль
 -W, --password           запрашивать пароль всегда (обычно не требуется)
 --role=ИМЯ_РОЛИ          выполнить SET ROLE перед выгрузкой

Если имя базы данных не указано, используется переменная окружения PGDATABASE.


Описание утилиты полного копирования БД в виде файлов

pg_basebackup делает базовую резервную копию работающего сервера PostgreSQL.

Использование:

 pg_basebackup [ПАРАМЕТР]...

Параметры, управляющие выводом:

 -D, --pgdata=КАТАЛОГ   сохранить базовую копию в указанный каталог
 -F, --format=p|t       формат вывода (p (по умолчанию) - простой, t - tar)
 -R, --write-recovery-conf
                        записать recovery.conf после копирования
 -x, --xlog             включить в копию требуемые файлы WAL (режим fetch)
 -X, --xlog-method=fetch|stream
                        включить в копию требуемые файлы WAL, используя
                        заданный метод
 -z, --gzip             сжать выходной tar
 -Z, --compress=0-9     установить уровень сжатия выходного архива

Общие параметры:

 -c, --checkpoint=fast|spread
                        режим быстрых или распределённых контрольных точек
 -l, --label=МЕТКА      установить метку резервной копии
 -P, --progress         показывать прогресс операции
 -v, --verbose          выводить подробные сообщения
 -V, --version          показать версию и выйти
 -?, --help             показать эту справку и выйти

Параметры подключения:

 -d, --dbname=СТРОКА    строка подключения
 -h, --host=ИМЯ         имя сервера баз данных или каталог сокетов
 -p, --port=ПОРТ        номер порта сервера БД
 -s, --status-interval=ИНТЕРВАЛ
                        интервал между передаваемыми серверу
                        пакетами состояния (в секундах)
 -U, --username=NAME    connect as specified database user
 -U, --username=ИМЯ     имя пользователя баз данных
 -w, --no-password      не запрашивать пароль
 -W, --password         запрашивать пароль всегда (обычно не требуется)