@getnowtoday

Как правильно делать бекапы базы Postgresql на продашн сервере?

Есть pg_dump. Как правильно делать бэкапы базы Postgresql на сервере? По крону, примерно раз в день? И потом их закачивать на aws и dropbox? Шифровать? Сколько копий хранить, то есть, за какое время -- за последнюю неделю, месяц или ...? Может, на мыло тоже отправлять на всякий случай? Что-то ещё?

В общем, что и как?

Сторониие сервисы не хочу использовать.
  • Вопрос задан
  • 1065 просмотров
Пригласить эксперта
Ответы на вопрос 2
Assargin
@Assargin
Перед ответом смотрю наличие ✔ в ваших вопросах
По крону, примерно раз в день?

Можно и чаще, смотря, насколько чувствительно будет потерять данные между бэкапами. Если совсем-совсем чувствительно, нужно задуматься о поднятии реплики или о постоянном бэкапе (используя WAL-журналы).

И потом их закачивать на aws и dropbox?

Хоть куда, но обязательно куда-нибудь закачивать на совершенно отдельный сервер/сервис, с проверкой, что всё успешно закачалось.
И лучше - на 2 разных хранилища.

Может, на мыло тоже отправлять на всякий случай?

Ну, чисто факультативно можно, хотя смысла в этом я лично не вижу, если вы закачиваете бэкап на другие сервера/сервисы.
Т.е. на мыло вы можете слать, а можете и не слать, но закачивать бэкап на 1-2 других сервера/сервиса - необходимо.

Из личного опыта. Тру-админы, просьба поправить, если где-то косячу.
Написал bash-скрипт, который запускаю по крону раз в 3 часа. Скрипт
  • делает бэкап обычным pg_dump, в несколько потоков, в формате папки (--format=d)
  • проводит тестовое восстановление бэкапа. Чисто в лоб - завершится ли pg_restore с нулевым кодом возврата
  • сжимает бэкап БД и файлов в архив
  • отправляет архив на отдельное ftp-хранилище
  • отправляет архив на ещё одно ftp-хранилище
  • отправляет краткий лог всего процесса (с метками времени) в корпоративный slack

Пока храню всё, не вычищая старого (с местом проблем нет). В идеале, видимо, нужно хранить по схеме
  • N (где N - несколько десятков) последних
  • 4-6 последних еженедельных
  • 2-4 последних ежемесячных.
Ответ написан
Melkij
@Melkij
PostgreSQL DBA
Зависит от:
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 дней предыдущих ежедневных.

Что-то ещё - регулярно пробовать восстановить и запустить базу из бекапа.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы