[英]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二進制文件並且不能ssh進入數據庫實例(大概有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.