Автоматизированные бэкапы 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
Итоги
В итоге мы имеем автоматизированную систему для создания бэкапов, и что самое важное получаем уведомления на почту. Вот таким способом дёшево и сердито можно обезопасить себя от потери данных.