PostgreSQL¶
За бекъп на PostgreSQL се използва типът "Резултат от команда". Агентът за бекъп изпълнява pg_dump на устройството и записва изхода от командата директно в мястото за съхранение. По диска на сървъра не се създава временен файл. Всяко изпълнение на бекъпа създава нова версия на дъмпа, която по-късно можете да възстановите с psql.
Изисквания¶
- Агентът за бекъп е инсталиран на машината, на която работи PostgreSQL, и устройството е онлайн (вижте Добавяне на устройство (Linux)).
- На машината са налични
pg_dumpиpsql. Версията наpg_dumpтрябва да е същата или по-нова от версията на PostgreSQL сървъра. - Имате PostgreSQL потребител с права за четене на базата (вижте по-долу).
Подготовка на сървъра¶
Потребител за бекъп¶
Създайте отделен потребител, който може само да чете данните. При PostgreSQL 14 и по-нови версии е достатъчна вградената роля pg_read_all_data:
При по-стари версии дайте права за четене на конкретната база:
CREATE ROLE backup LOGIN PASSWORD 'парола';
GRANT CONNECT ON DATABASE shop TO backup;
\c shop
GRANT USAGE ON SCHEMA public TO backup;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO backup;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO backup;
Парола без интерактивно въвеждане (.pgpass)¶
Командата се изпълнява без потребител пред екрана, затова паролата не може да бъде въведена ръчно. Запишете я във файла .pgpass на потребителя, от чието име работи агентът. При Linux агентът работи като root, така че файлът е /root/.pgpass:
Форматът на реда е хост:порт:база:потребител:парола. PostgreSQL игнорира файла, ако правата му не са 600.
Проверка от командния ред¶
Преди да създадете защитения елемент, проверете дали командата работи от името на root:
sudo -H /usr/bin/pg_dump -h localhost -U backup -d shop --no-owner --no-privileges --no-password | head
Ако виждате началото на SQL дъмпа, можете да продължите. Ако командата поиска парола или върне грешка, проверете .pgpass и правата на потребителя.
Създаване на защитения елемент¶
Стъпка 1: Устройство и тип на архивиране¶
В раздел "Защитени елементи" натиснете "Добавяне на защитен елемент". Въведете име (например PostgreSQL - shop), изберете устройството, на което работи базата, и маркирайте типа "Резултат от команда". Натиснете "Напред".
Стъпка 2: Резултат от изпълнение на команда¶
Попълнете трите полета:
| Поле | Стойност | Описание |
|---|---|---|
| Команда | /usr/bin/pg_dump -h localhost -U backup -d shop --no-owner --no-privileges --no-password |
Командата, чийто изход се архивира. Използвайте пълния път до pg_dump. |
| Работна директория | /tmp |
Директорията, от която се стартира командата. |
| Запазване като | shop.sql |
Името на файла, под което дъмпът се появява в бекъпа и при възстановяване. |
Какво правят параметрите на pg_dump:
-h localhost -U backup -d shop— хост, потребител и база, която се архивира.--no-owner --no-privileges— дъмпът не съдържаALTER ... OWNERиGRANTкоманди. Така можете да го възстановите с друг потребител, без грешки за липсващи роли.--no-password—pg_dumpникога не пита за парола. Ако паролата липсва в.pgpass, командата спира веднага с грешка, вместо да чака.
Съвет
Използвайте стандартния текстов (plain SQL) формат, както в примера. Той се възстановява директно с psql, а системата за бекъп компресира и дедуплицира данните, така че допълнително компресиране с -Fc или gzip не е нужно.
Сложни команди
Ако имате нужда от пренасочвания, променливи на средата или няколко команди една след друга, запишете ги в скрипт (например /usr/local/bin/pg-backup.sh), направете го изпълним и посочете пътя до скрипта в полето "Команда". Скриптът трябва да извежда дъмпа на стандартния изход.
Натиснете "Напред".
Стъпки 3–5: Команди, график и политика за съхранение¶
Останалите стъпки работят по същия начин като при другите типове бекъп:
- Команди за изпълнение — по желание
- График — например ежедневно в 00:00
- Политика за съхранение — колко версии на дъмпа да се пазят
Натиснете "Добавяне", за да създадете защитения елемент.
Проверка на бекъпа¶
Новият елемент се появява в списъка с тип "Резултат от команда". За да не чакате графика, стартирайте първия бекъп ръчно от "Управление" → "Ръчно архивиране".
Резултатът се вижда в раздел Процеси. Статусът на процеса зависи от командата:
- Успешно —
pg_dumpе завършил без грешки. - Предупреждение — командата е изписала нещо в стандартния изход за грешки (stderr). Отворете детайлите на процеса, за да видите съобщението.
- Неуспешно — командата е завършила с ненулев код за изход, например заради грешна парола или липсваща база.
Повече от една база¶
pg_dump архивира по една база. За всяка база създайте отделен защитен елемент със собствено име на файла в "Запазване като". Така всяка база има собствен график и политика за съхранение и може да бъде възстановена самостоятелно.
Ако искате всички бази и глобалните обекти (роли, tablespaces) в един файл, използвайте pg_dumpall. Той изисква потребител с права на суперпотребител.
Следваща стъпка¶
Как да върнете данните от бекъпа в PostgreSQL е описано в Възстановяване на PostgreSQL.



