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

Photo by Caspar Camille Rubin on UnsplashPhoto by Caspar Camille Rubin on Unsplash

Всем привет! Я бы сказал что эта статья cookbok по которому можно создать простое и эффективное решение для создания бэкапов базы данных.

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

В ходе исследования был собран следующий рецепт с помощью которого можно делать бэкапы и получать уведомления по почте, вам даже не понадобиться свой 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

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

shmod +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

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

Доводилось ли вам отправлять письма из CMD линукс? Мне нет, но эта возможность радует своей простотой, настолько просто что даже сложно

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

Итоги

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

© Habrahabr.ru