Автоматический бэкап PostgreSQL в Linux

24 мая 2012
Рубрика: Linux
Теги: , , ,

Zeboton

О том как делать автоматические резервные копии в PostgreSQL рассказано в статье Automated Backup on Linux. Скрипты из этой статьи всем хороши, кроме того, что если их прописать в cron, то ничего бэкапиться не будет. А происходит так из-за того, что нигде не указывается пароль пользователя PostgreSQL от имени которого делается бэкап.

Для того чтобы эти скрипты заработали в автоматическом режиме нужно в самый конец  pg_backup.config добавить:
# Set PGUSER and PGPASSWORD
PGUSER="postgres"
PGPASSWORD="password"
export PGUSER PGPASSWORD
# End

Естественно, вместо пользователя postgres можно использовать любого нужного пользователя, а вместо password нужно указать пароль этого пользователя.

А в целях безопасности в самом конце pg_backup.sh нужно вставить:
# Unset PGUSER and PGPASSWORD
PGUSER=""
PGPASSWORD=""
export PGUSER PGPASSWORD
# End

Теперь можно сделать файлы исполняемыми:
chmod u+x pg_backup.sh pg_backup_rotated.sh

(для проверки работоспособности нужно выполнить bash pg_backup.sh)

Прописать их в cron пользователя postgres (на примере Ubuntu):
sudo crontab -u postgres -e

В файл нужно добавить строки:
SHELL=/bin/bash
15 3 * * * /path/to/script/pg_backup.sh > /dev/null 2>&1

Надо напоминать, что /path/to/script/ — это путь к директории с файлом?

Теперь ждём 03:15 утра и проверяем работоспособность.

Резервная копия статьи Automated Backup on Linux с уже вставленными кусками кода.

6 комментариев для “Автоматический бэкап PostgreSQL в Linux”

  1. Роман25 декабря 2013 ~ 16:51

    А почему бы не сделать по-элегантнее, без «засветки» пароля, например так:
    1. Определим user map для root. Для этого добавим в файл $PGDATA/pg_ident.conf строчку :
    root root postgres
    2. Добавим этот user map в соответствующую запись в файле $PGDATA/pg_hba.conf (приписать опцию map=root в соответсвующую строку идентификации), например:
    local all postgres peer map=root
    3. Рестарт Postgres:
    service postgresql-9.3 restart
    После этого, все клиенты (тот же psql ), запускаемые под акком root , будут коннектиться к PostgresQL как postgres . Все должно запахать, и нигде никаких паролей указывать не надо.
    Не нравится вам root – тоже самое можно проделать для любого системного акка, под которым вы хотите запускать бэкап скрипт.

  2. Zeboton25 декабря 2013 ~ 20:57

    Роман, спасибо за красивое решение! Постараюсь опробовать его и отписаться о том что получилось.

    А не сделал я так из-за того, что я по роду деятельности не системный администратор и многого ещё не знаю — я только учусь (с) 🙂

  3. Rolex8 декабря 2014 ~ 20:23

    Здравствуйте.

    Ребят, подскажите пожалуйста, как настроить все то же самое, только с выгрузкой backup-а на сторонний FTP сервер, а не локально на машину.

    Или проще выгрузить dump локально и через отдельный скрипт загружать его на FTP?

  4. Zeboton9 декабря 2014 ~ 10:53

    Rolex, я вижу несколько вариантов:

    1. Взять скрипты из пакета backup-manager ( apt-get install backup-manager ) и либо позаимствовать оттуда код отправки файлов на FTP, либо использовать скритпы из пакета для этой цели, только учти, что пакет уже давно не поддерживается, однако, стабильно работает.
    2. Использовать вместо FTP SSH, что проще ( нужно добавить в существующий скрипт только одну строчку scp) и надёжнее.
  5. Rolex11 декабря 2014 ~ 12:07

    Не думаю, что для кого-то открыл америку, но вот еще один вариант для создания бэкапов. Через утилиту barman

  6. Олег6 сентября 2015 ~ 17:05

    Спасибо. Все работает. Класс.

Ваш комментарий

*