Pull to refresh

Comments 18

Главная проблема pg_basebackup — отсутствие бинарной совместимости между версиями, а иногда приходится восстанавливать бекапы лайвовых баз на девелоперских машинах, где версия постгреса может отличаться… Не могли бы посоветовать статьи по оптимизации создания бекапа по средствам pg_dump? Надеюсь, что увеличение гранулярности базы — не единственный способ уменьшить время бекапа
Почему не рассмотрены способы бэкапирования бинарных логов? Никакая нагрузка на базу и сеть, восстановление на любой момент времени, малый размер.
А разве работа на момент снятия копии не должна быть полностью приостановлена?
Нет, останавливать ничего не нужно.
И где тогда гарантия, что вы не заберете базу между двумя зависимыми транзакциями?
Во время бэкапа (с pg_basebackup) открывается доп. соединение (при использовании -X stream) которое тянет WAL в бэкап, либо WAL сегменты могут быть подтянуты в конце резервного копирования (при -X fetch). Так что все выполненные транзакции также попадут в бэкап.
При запуске постгреса с этого бэкапа, WAL журналы будут проиграны при старте и база достигнет состояния на момент времени когда закончилось выполнение pg_basebackup.
Справедливо ли это утверждение так же и для pg_dump?
Или для этого случая желательно останавливать приложение, что бы не нарушить целостность базы?
Нет, для pg_dump это правило не работает.
Нет, останавливать ничего не нужно.
пардон за дубль… тяжело отвечать на коментарии когда хабр ддосят.
>> Почему не рассмотрены способы бэкапирования бинарных логов?
Не совсем понимаю что именно там можно рассматривать. Хм, вобще не думал что с этим могут быть какие-то вопросы/проблемы, там на мой взгляд все довольно просто.
И там кстати, можно использовать те же подходы что описаны выше.

>> восстановление на любой момент времени,
Восстановление надо рассматривать отдельным топиком))) т.к. там много нюансов можно рассмотреть
А как же такой способ?

1) SELECT pg_start_backup('label');
2) делаем снапшот файловой системы
3) SELECT pg_stop_backup();
4) спокойно копируем снапшот куда подальше.
pg_basebackup не требует отдельного вызова функций pg_start_backup/pg_stop_backup как это требуется при использовании rsync/tar/cp;
Да можно делать через копирование снимков в т.ч. и с LVM, но я стараюсь не заморачиваться с pg_start/stop_backup, для себя уже выбрал pg_basebackup))
Всё это круто конечно, но вот как проверять целостность БД? — По мне так не один из этих инструментов нормально не может. Например pg_dump, если делает бэкап и допустим где-то БД не целостная, ну например где-то ключ посеяли, он доходит до этого места и просто создает не целостный архив, а точнее кривой. К сожалению инструменты проверки целостности БД в PostgreSQL увы отсутствуют и надо их писать самому…
На ум пришло одно решение: Настраиваем слейв, отключаем его от источника, снимаем с него дамп, подключаем к источнику.
Всю последовательность можно в скрипте прописать, думаю, что будет не очень сложно :)
Я раньше пользовался pg_basebackup и pg_dump для создания резервных копий, но этот способ не очень удобен когда мне нужно делать резервную копию каждые 4 часа и отправлять бэкапы на Google Drive. Я нашел эту программу, которая может это делать, может кому-то пригодиться — http://postgresql-backup.com/
Sign up to leave a comment.

Articles