А как ты снимаешь дамп postgres?

Итак, настраиваем автоматическое бэкапирование бд, с блек-джеком и логами.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Периодически возникает такая задача, проектов много, нужно автоматически снимать дампы. В случае чего слать уведомления и дебажить проблемы в случае их присутствия.

В определённый момент пришёл к достаточно простому способу, скрипт в кроне такого вида:

DATE=$(date '+%Y-%m-%d')
echo "save dump db"
pg_dump -h <ip> -p <port> -U <user> -v -F c -f db_$DATE.tar.gz <db name> 2> /opt/backup-db/dump_log_$DATE && [[ $? -eq 0 ]] && curl -i -X \
GET "https://api.telegram.org/bot<bot id>:<bot token>/sendMessage?chat_id=<chat id>&text=Дамп базы данных снят успешно, на сервере <servername>" \
|| curl -i -X GET "https://api.telegram.org/bot<bot id>:<bot token>/sendMessage?chat_id=<chat id>&text=Во время снятия дампа произошла ошибка. Смотри лог на сервере <servername>"

Собственно, что он делает:

  • Ну, естественно, снимает дамп бд, вывод процесса кладёт в определённую директорию, прикручивая к названию файла $DATE.

  • В случае успеха (&& [[ $? -eq 0 ]] &&) дёргает телеграм бота, чтоб он написал в заданный чат сообщение об этом.

  • В случае неуспеха (||, то есть если код выполнения не равен 0) - дёргает тот же бот чтобы он в чат сообщил об ошибке и где она произошла.

Ну и экономим место на дисках, после выполнения этого скрипта, запускаем:

find /opt/backup-db -type f -mtime +10 -delete

Это удалит все файлы в директории, старше заданного количества дней +1.