Към съдържанието

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 'парола' IN ROLE 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:

echo "localhost:5432:*:backup:парола" | sudo tee /root/.pgpass
sudo chmod 600 /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: Резултат от изпълнение на команда

Команда за pg_dump

Попълнете трите полета:

Поле Стойност Описание
Команда /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: Команди, график и политика за съхранение

Останалите стъпки работят по същия начин като при другите типове бекъп:

Натиснете "Добавяне", за да създадете защитения елемент.

Проверка на бекъпа

Защитеният елемент в списъка

Новият елемент се появява в списъка с тип "Резултат от команда". За да не чакате графика, стартирайте първия бекъп ръчно от "Управление" → "Ръчно архивиране".

Успешен процес в раздел Процеси

Резултатът се вижда в раздел Процеси. Статусът на процеса зависи от командата:

  • Успешно — pg_dump е завършил без грешки.
  • Предупреждение — командата е изписала нещо в стандартния изход за грешки (stderr). Отворете детайлите на процеса, за да видите съобщението.
  • Неуспешно — командата е завършила с ненулев код за изход, например заради грешна парола или липсваща база.

Повече от една база

pg_dump архивира по една база. За всяка база създайте отделен защитен елемент със собствено име на файла в "Запазване като". Така всяка база има собствен график и политика за съхранение и може да бъде възстановена самостоятелно.

Ако искате всички бази и глобалните обекти (роли, tablespaces) в един файл, използвайте pg_dumpall. Той изисква потребител с права на суперпотребител.

Следваща стъпка

Как да върнете данните от бекъпа в PostgreSQL е описано в Възстановяване на PostgreSQL.