Как правильно делать бекапы базы Postgresql на продашн сервере?
По крону, примерно раз в день?
Можно и чаще, смотря, насколько чувствительно будет потерять данные между бэкапами. Если совсем-совсем чувствительно, нужно задуматься о поднятии реплики или о постоянном бэкапе (используя WAL-журналы).И потом их закачивать на aws и dropbox?
Хоть куда, но обязательно куда-нибудь закачивать на совершенно отдельный сервер/сервис, с проверкой, что всё успешно закачалось.
И лучше - на 2 разных хранилища. Может, на мыло тоже отправлять на всякий случай?
Ну, чисто факультативно можно, хотя смысла в этом я лично не вижу, если вы закачиваете бэкап на другие сервера/сервисы.
Т.е. на мыло вы можете слать, а можете и не слать, но закачивать бэкап на 1-2 других сервера/сервиса - необходимо.
Из личного опыта. Тру-админы, просьба поправить, если где-то косячу.
Написал bash-скрипт, который запускаю по крону раз в 3 часа. Скриптделает бэкап обычным pg_dump, в несколько потоков, в формате папки (--format=d)проводит тестовое восстановление бэкапа. Чисто в лоб - завершится ли pg_restore с нулевым кодом возвратасжимает бэкап БД и файлов в архивотправляет архив на отдельное ftp-хранилищеотправляет архив на ещё одно ftp-хранилищеотправляет краткий лог всего процесса (с метками времени) в корпоративный slack
Пока храню всё, не вычищая старого (с местом проблем нет). В идеале, видимо, нужно хранить по схемеN (где N - несколько десятков) последних4-6 последних еженедельных2-4 последних ежемесячных.
Зависит от:
0) какой промежуток времени вам допустимо потерять при восстановлении
1) сколько места вы можете выделить для хранения бекапов
2) какой запас времени вы хотите сохранять для возможности восстановить данные когда-то из более далёкого прошлогоМожет, на мыло тоже отправлять на всякий случай?
Как через почту пропихнуть даже мелкие бекапы в десяток гигабайт?
Или вы про совсем крошечные базы спрашиваете?
Шифровать или нет - зависит от требований к безопасности и оценке риска в случае disaster recovery не восстановить ключ шифрования.
Для хорошего point in time recovery - pg_basebackup + pg_receivexlog (archive_command только если уверены, что можете её сделать нормально). Или что-то, работающее поверх них.
Отдельный случай pitr с хранением в амазоне - см. вполне внятный wal-e
Если pitr не обязателен, то pg_dump делать. Да, лучше архивировать, сжимаются дампы весьма неплохо.
Например, политика бекапа из практики: ежедневный pg_dumpall, хранятся за 1 число каждого месяца на протяжении года плюс 8 дней предыдущих ежедневных.
Что-то ещё - регулярно пробовать восстановить и запустить базу из бекапа.