Лучший способ инкрементного резервного копирования PostgreSQL
В настоящее время я использую pg_dump
с номером gzip
с номером split
. Но проблема в том, что все выходные файлы всегда меняются. Таким образом, резервное копирование на основе контрольной копии копирует все данные.
Есть ли еще какие-либо хорошие способы выполнения инкрементной резервной копии базы данных PostgreSQL, где полная резервная копия данных может быть восстановлена из резервных данных?
Например, если pg_dump
может сделать все абсолютно упорядоченным, поэтому все изменения применяются только в конце дампа или аналогичного.
Ответы
Ответ 1
Обновление: Проверьте 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, которые могут упростить настройку и восстановление этих конфигураций. Но я сам их не использовал.
Ответ 2
Также проверьте http://www.pgbackrest.org
pgBackrest - это еще один инструмент резервного копирования для PostgreSQL, который вы должны оценивать по мере его поддержки:
- параллельная резервная копия (тестируется для масштабирования почти линейно до 32 ядер, но, вероятно, может идти гораздо дальше..)
- резервные копии с резервным сжатием
- инкрементные и дифференциальные (сжатые!) резервные копии
- потоковое сжатие (данные сжимаются только один раз в источнике, а затем передаются по сети и сохраняются)
- parallel, delta restore (возможность обновления старой версии до последней версии)
- Полностью поддерживает табличные пространства
- Резервное копирование и истечение срока архива
- Возможность возобновить резервное копирование, которое по какой-то причине не удалось
- и т.д. и т.д.
Ответ 3
Другим методом является резервное копирование на обычный текст и использование rdiff для создания инкрементных различий.