繁体   English   中英

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的exec()方法在PHP中使用pg_dump。 (忽略此问题的安全性。)

如果我们假设该应用程序实例没有pg_dump二进制文件并且不能s​​sh进入数据库实例(大概有pg_dump),那么有一种方法可以:

  • 在任一实例上创建数据库的备份?
  • 克隆数据库中的架构?

我确实找到了这个plpgsql函数该函数对于克隆架构可能是一个不错的选择,但是并不能解决备份问题。 能够以某种方式从PHP调用pg_dump可以节省很多代码重写。

谢谢。

一种选择是将供应商pg_dump与您的应用程序一起使用。

为此,启动一个Ubuntu 14.04容器或VM,在其中安装Postgres,然后将pg_dump从VM中复制到您的应用程序目录中(您放置它的位置并不重要,只是在任何公共的地方都没有)。 进行这项工作的技巧是,您还必须复制任何依赖的共享库。 如果在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM