Лучший метод для инкрементного резервного копирования PostgreSQL - PullRequest
54 голосов
/ 03 апреля 2011

В настоящее время я использую pg_dump по каналу gzip по каналу split.Но проблема в том, что все выходные файлы всегда меняются.Таким образом, резервное копирование на основе контрольной суммы всегда копирует все данные.

Существуют ли другие эффективные способы инкрементного резервного копирования базы данных PostgreSQL, где можно восстановить полную базу данных из данных резервного копирования?

Например, если pg_dump может сделать все абсолютно упорядоченным, значит, все изменения применяются только в конце дампа или тому подобное.

Ответы [ 3 ]

54 голосов
/ 03 апреля 2011

Обновление: Проверьте Barman , чтобы упростить настройку архивации WAL для резервного копирования.

Вы можете использовать метод непрерывного архивирования WAL PostgreSQL . Сначала необходимо установить wal_level=archive, затем выполнить полное резервное копирование на уровне файловой системы (между выдачей команд pg_start_backup() и pg_stop_backup()), а затем просто скопировать более новые файлы WAL, настроив параметр archive_command.

Преимущества:

  • Инкрементно, архивы WAL включают в себя все необходимое для восстановления текущего состояния базы данных
  • Практически нет накладных расходов, копирование файлов WAL обходится дешево
  • Вы можете восстановить базу данных в любой момент времени (эта функция называется PITR, или восстановление на момент времени)

Недостатки:

  • Сложнее настроить, чем pg_dump
  • Полная резервная копия будет намного больше, чем pg_dump, потому что включены все внутренние структуры таблиц и индексы
  • Не подходит для баз данных с интенсивной записью, так как восстановление займет много времени.

Существуют некоторые инструменты, такие как pitrtools и omnipitr , которые могут упростить настройку и восстановление этих конфигураций. Но я сам ими не пользовался.

7 голосов
/ 14 ноября 2016

Также ознакомьтесь с http://www.pgbackrest.org

pgBackrest - еще один инструмент резервного копирования для PostgreSQL, который вы должны оценить, так как он поддерживает:

  • параллельное резервное копирование (тестируется для масштабирования почти линейно до32 ядра, но, вероятно, могут пойти гораздо дальше ..)
  • сжатые резервные копии
  • инкрементные и дифференциальные (сжатые!) Резервные копии
  • потоковое сжатие (данные сжимаются толькоодин раз в источнике, а затем передается по сети и сохраняется)
  • параллельно, дельта-восстановление (возможность обновления более старой копии до последней)
  • Полностью поддерживает табличные пространства
  • Резервное копированиеротация и срок действия архива
  • Возможность возобновить резервное копирование, которое по какой-то причине не удалось
  • и т. д., и т. д.
1 голос
/ 04 апреля 2011

Другой способ - сделать резервную копию в виде обычного текста и использовать rdiff для создания инкрементных различий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...