pg_dump 从一个 Cloud Foundry 实例到另一个

pg_dump from one Cloud Foundry instance to another

我们正在将 PHP/PostgreSQL Web 应用程序从 linux 服务器移动到 Cloud Foundry。

我们在 PHP 的实例上有主应用程序 运行,将其称为应用程序实例。我们在另一个带有 Postgres 的实例上有数据库 运行,将其称为 db 实例。应用程序实例通过 PHP 的 Postgres 扩展通过主机和端口直接连接到数据库实例。

部分应用程序使用 PHP 中的 pg_dump,使用 php 的 exec() 方法。 (忽略此的安全隐患..)

如果我们假设应用程序实例没有 pg_dump 二进制文件并且不能通过 ssh 进入数据库实例(大概有 pg_dump)有没有办法:

我确实找到了 this plpgsql function,这可能是克隆模式的一个不错的选择,但没有解决备份问题。能够以某种方式从 PHP 调用 pg_dump 将节省大量代码重写。

谢谢。

一种选择是将您的应用程序 pg_dump 卖给供应商。

为此,启动一个 Ubuntu 14.04 容器或 VM,在其中安装 Postgres,然后将 pg_dump 从 VM 复制到您的应用程序目录(放置位置无关紧要)真的,只是没有 public 的地方)。完成这项工作的诀窍是您还必须复制任何依赖的共享库。如果您在 VM 或容器中 运行 ldd pg_dump(完整或相对路径),您应该能够获得 pg_dump 所依赖的库列表。也将它们复制到您的应用程序中,您可以将它们放入与 pg_dump 二进制文件相同的目录中(尽管它们存在的位置并不重要)。

然后当您从 PHP 应用程序调用 exec 时,您需要做两件事。首先,使用 pg_dump 二进制文件的完整路径。其次,您需要将环境变量 LD_LIBRARY_PATH 设置为指向任何所需共享库的位置。该组合应该 运行 您在使用复制出的共享库时从 VM 复制出的二进制文件,这应该是您 运行 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