Можно ли напрямую передавать базу данных PostgreSQL между двумя серверами PostgreSQL?
В настоящее время я настраиваю «разрабатываемую» версию моей производственной базы данных, используя pg_dump для сериализации всей базы данных в файл, загружая файл, а затем используя pg_restore для загрузки базы данных на сервер разработки. Однако по мере роста базы данных этот процесс занимает часы. Есть ли способ просто «соединить» два сервера и напрямую передать базу данных вместо этого длительного процесса дампа / загрузки / восстановления?
Обратите внимание, что я работал только с MySQL, но PostegreSQL не должен отличаться.
Если pg_dump - это мой mysqldump, то разве вы не можете просто передать вывод в pg_restore? Это самый простой и быстрый способ, о котором я могу думать. Все остальное просто накладные расходы
В PostgreSQL есть два основных типа резервного копирования и репликации для достижения вашей цели. Теперь вы используете логическое резервное копирование, попробуйте вместо него физическое резервное копирование:
Физическое холодное резервное копирование означает копирование файлов (при необходимости также и двоичных файлов rdbms) в место, откуда вы можете вернуть их в случае проблем.
Преимущества. Физическое холодное резервное копирование обычно выполняется намного быстрее, чем логическое горячее резервное копирование.
Недостатки: кластер базы данных должен быть выключен во время резервного копирования. Вы не можете использовать холодное резервное копирование для обновления кластера базы данных PostgreSQL.
Затем для выполнения холодного физического резервного копирования вам необходимо:
Если вы не можете остановить кластер, лучше настроить асинхронную репликацию с использованием новой версии postgreSQL 9.0.
Одна вещь, которую вы могли бы рассмотреть, - это наличие двух баз данных разработки, поэтому у вас есть одна, которую вы используете, а другая проходит цикл pg_dump | pg_restore. Хотя у меня никогда не было базы данных, которая занимала бы больше нескольких минут, поэтому я никогда не исследовал, не --format tar
может быть быстрее, чем формат по умолчанию.
Если два сервера имеют одинаковую архитектуру, вы можете просто скопировать каталог данных. Обычно для этого нужно выключить сервер или настроить архивирование WAL. Но для создания тестовой базы данных может быть достаточно сделать это в любом случае и очистить вашу копию с помощью pg_resetxlog
потом.
Вы можете использовать rsync, чтобы уменьшить объем данных, копируемых при последующих запусках.
Если два сервера имеют разную архитектуру, тогда pg_dump
это единственный маршрут.