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