Postgres Backup
Содержание
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) и восстановлением серверов.
Вкратце, функциональность сводится к:
- Создание и постоянное обновление бэкапа, причём один Barman сервер может принимать WAL файлы с нескольких PostgreSQL серверов, а один PostgreSQL сервер может архивироваться на несколько территориально разнесённых Barman серверов.
- Восстановление нужного бэкапа с указанием имени бэкапа (список возможных вариантов есть), 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 запрашивать пароль всегда (обычно не требуется)