Решение для восстановления и резервного копирования PostgreSQL - PullRequest
9 голосов
/ 05 февраля 2009

A) Какое лучшее решение для регулярного резервного копирования большой базы данных PostgreSQL (версия 8.3 работает на последнем сервере Ubuntu); пожалуйста, не говорите pg_dump с этими мучительно медленными операторами вставки

B) Какое решение для репликации баз данных PostgreSQL работает в реальном мире

Ответы [ 3 ]

6 голосов
/ 05 февраля 2009

Я думаю, что есть только один ответ на этот вопрос.

ПИТР, или момент времени восстановления. Это в основном архивирование журналов транзакций, и, насколько я знаю, лучший способ сделать резервные копии.

Я пару раз настраивал для 8.1, но в 8.3 он должен быть таким же.

В postgresql.conf все, что вам нужно сделать, это добавить это:

archive_command = 'test ! -f /path/to/your/backups/archive_logs/%f && cp -i %p /path/to/your/backups/archive_logs/%f </dev/null'

Эта команда копирует архивные журналы в указанную директорию, где вы можете безопасно создать резервную копию с помощью выбранного вами программного обеспечения для резервного копирования.

Чтобы сделать полную резервную копию, вам нужно сначала сообщить PostgreSQL, что вы делаете резервную копию. Это делается с помощью команды psql psql "SELECT pg_start_backup('my_backup');" После этого просто скопируйте каталог данных с помощью rsync, cpio или другого инструмента. Если база данных интенсивно используется, файлы будут меняться во время копирования, поэтому важно, чтобы инструмент справился с этим правильно и не спасался.

После завершения копирования просто запустите psql "SELECT pg_stop_backup();", чтобы сообщить PostgreSQL, что нужно остановить его снова. Что эти команды делают, так это помещают маркер в журналы архива, с которого началось резервное копирование, поэтому при восстановлении он знает, откуда ему нужно начать чтение.

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

Одна вещь, которая хороша, если вы используете PITR, это то, что вы можете указать временную метку, когда вы хотите, чтобы архивные журналы добавлялись. Таким образом, он также может сохранить базу данных от несчастных случаев (например, удаление или изменение некоторых данных)

4 голосов
/ 05 февраля 2009

A. По умолчанию pg_dump не использует операторы вставки. По умолчанию будет использоваться команда COPY. Ключ командной строки -d или --inserts приведет к тому, что pg_dump поместит операторы вставки в экспорт. Если у вас есть один из этих ключей в вашей команде pg_dump, просто удалите их, чтобы pg_dump использовал COPY.

B. В следующей версии Postgres у них будет простая репликация из коробки. Я думаю, что релиз 8.4 планируется в ближайшее время. Так что, возможно, стоит дождаться этого, если это возможно.

2 голосов
/ 05 февраля 2009

Вы можете использовать Онлайн WAL-Backup , возможно, в сочетании ночных / ежедневных / еженедельных / ежемесячных pg_dumps. Раз в неделю / месяц вы должны копировать весь кластер.

Восстановление работает достаточно хорошо, и вы почти не теряете данные при раннем копировании (лучше использовать rsync, поскольку он очень эффективен).

Скорость хорошая, потому что нужно только применять WAL, которые позже, чем ваша последняя полная кластерная резервная копия / копия.

...