pg_dump из одного экземпляра Cloud Foundry в другой

Мы переносим веб-приложение PHP / PostgreSQL с сервера Linux на Cloud Foundry.

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

Часть приложения использует pg_dump в PHP, используя метод phec exec (). (Игнорирование последствий для безопасности ..)

Если мы предположим, что экземпляр приложения не имеет двоичного файла pg_dump И не может ssh войти в экземпляр db (который предположительно имеет pg_dump), то есть способ:

  • Создать резервную копию базы данных на одном из экземпляров?
  • Клонировать схему в базе данных?

Я нашел эта функция plpgsql это может быть хорошим вариантом для клонирования схем, но не решает проблему резервного копирования. Возможность вызывать pg_dump из PHP позволит сэкономить много переписывания кода.

Благодарю.

0

Решение

Одним из вариантов будет продавец pg_dump с вашим приложением.

Для этого раскрутите контейнер Ubuntu 14.04 или виртуальную машину, установите в него Postgres и скопируйте pg_dump из виртуальной машины в директорию вашего приложения (куда бы вы ни положили, на самом деле это не имеет значения, просто нигде не было бы публично) Хитрость в этой работе заключается в том, что вам также необходимо скопировать любые зависимые разделяемые библиотеки. Если вы бежите ldd pg_dump (полный или относительный путь) в вашей виртуальной машине или контейнере, вы сможете получить список библиотек, которые pg_dump зависит от. Скопируйте их в свое приложение, вы можете поместить их в тот же каталог, что и ваш pg_dump бинарный (хотя на самом деле не имеет значения, где они существуют).

Затем, когда вы звоните exec из вашего PHP-приложения вам нужно сделать две вещи. Во-первых, используйте полный путь к вашему pg_dump двоичный файл. Во-вторых, вам нужно установить переменную среды LD_LIBRARY_PATH указать расположение любых необходимых общих библиотек. Комбинация должна запускать двоичный файл, который вы скопировали из виртуальной машины, используя совместно используемые библиотеки, которые вы скопировали, и это все, что вам нужно для запуска pg_dump,

Лучший путь будет только установить LD_LIBRARY_PATH напрямую и только когда вы запускаете бинарный файл, но если это не вариант, вы можете добавить .profile файл в ваше приложение и установить его там. Вот пример того, что вы можете поместить в этот файл.

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/path/to/pg_libs

https://docs.cloudfoundry.org/devguide/deploy-apps/deploy-app.html#profile

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector