Автоматизированные бэкапы postgresql

Автоматизированные бэкапы postgresql


Казалось бы довольно очевидная задача но тем не менее, решая её, можно столкнуться с множеством проблем. Готовые бесплатные решения в большинстве своём направлены на управление кластерами или не поддерживаются на ARM машинах. Здесь же в статье рассматривается простое решение для ненагруженной базы, для которой применение глобальных enterprise решений может оказаться избыточным.

В ходе исследования был собран следующий рецепт с помощью которого можно делать бэкапы и получать уведомления по почте, вам даже не понадобиться свой smtp достаточно gmail аккаунта.

Скрипт создания бэкапов

# ~/pg_backup.sh
db_name=dbname
db_user=dbuser
db_host=host
backupfolder=~/postgresql/backups 
recipient_email=youremail@example.ru
# Сколько дней хранить файлы
keep_day=30
sqlfile=$backupfolder/database-$(date +%d-%m-%Y_%H-%M-%S).sql
zipfile=$backupfolder/database-$(date +%d-%m-%Y_%H-%M-%S).zip
mkdir -p $backupfolder

if pg_dump -U $db_user -h $db_host $db_name > $sqlfile ; then
   echo 'Sql dump created'
else
   echo 'pg_dump return non-zero code' | mailx -s 'No backup was created!' $recipient_email
   exit
fi

if gzip -c $sqlfile > $zipfile; then
   echo 'The backup was successfully compressed'
else
   echo 'Error compressing backup' | mailx -s 'Backup was not created!' $recipient_email
   exit
fi
rm $sqlfile 
echo $zipfile | mailx -s -a $sqlfile 'Backup was successfully created' $recipient_email
 
find $backupfolder -mtime +$keep_day -delete

Делаем файл исполняемым

chmod +x pg_backup.bash

pgpass

Что бы pg_dump не запрашивал пароль создаем .pg_pass в домашней директории пользователя в формате

hostname:port:database:username:password

И устанавливаем корректные права

chmod 600 ~/.pgpass

запуск по расписанию

добавляем pg_backup.bash в cron. Например на каждый день в 5 утра.

$ crontab -e

и добавляем туда строчку. Важно, в кроне нужно указать полный путь.

0 5 * * 0-6 /home/www/pg_backup.bash

Настраиваем отправку писем

sudo apt-get update 
sudo apt-get install postfix mailutils ssmtp

Настраиваем smtp. Тут можно использовать обычную гугл почту

#/etc/ssmtp/ssmtp.conf
root=your@email.com
mailhub=smtp.gmail.com:587
AuthUser=your@gmail.com
AuthPass=yourGmailPass
UseTLS=YES
UseSTARTTLS=YES

Итоги

В итоге мы имеем автоматизированную систему для создания бэкапов, и что самое важное получаем уведомления на почту. Вот таким способом дёшево и сердито можно обезопасить себя от потери данных.

Report Page