簡體   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