2017-07-21 120 views
1

我有兩臺服務器具有相同版本的postgres(9.4)。 我想快速克隆數據庫(備份和恢復)。 正如我所理解的「從模板創建數據庫xxx」是製作數據庫副本的最快方法。postgres,從外部服務器上的模板創建數據庫

如何從一臺服務器克隆到另一臺服務器? 我可以使用dblink完成這個任務嗎?

我知道使用pg_dump和pg_restore(psql)的解決方案,但我認爲它對我來說太慢了。 例如,5GB數據庫大約在12分鐘後恢復(在pg_restore中使用-j選項)並在大約2分鐘後備份。

另一種方式,可能是我可以複製一些postgres文件(/ var/lib/postgresql/*)到另一臺服務器,並在那裏運行postgres?如何找到這個文件?

回答

1

您不能使用來自不同數據庫集羣(在相同或不同機器上)的數據庫作爲模板來創建新數據庫,因此不能使用該數據庫。

將數據庫從一個羣集複製到另一個羣集的唯一現有方式是pg_dump/pg_restore

物理副本是最快的方式,但不能將單個文件或數據庫從一個數據庫羣集複製到另一個數據庫羣集。

如果您不介意複製整個數據庫羣集,則可以選擇停止併除去目標數據庫羣集,執行pg_basebackup -X stream以創建源數據庫羣集的物理備份,根據需要編輯配置並啓動新的副本。

如果pg_basebackup是你太慢了,你可以用手」與pg_start_backuppg_stop_backup執行聯機備份「和插圖中與你有最快的技術複製文件。

如果停止源數據庫集羣沒有問題,則不必擔心恢復問題,而且速度會更快。

0

Laurenz說,你不能複製模板。原因是它需要集成到postgres的共享目錄中,如pg_database等,並且因爲它共享數據庫範圍的資源,如事務日誌(pg_clog)。

從理論上講,你其實可以另一臺機器複製的模板,如果所有元組被VACUUM FREEZE凍結。但是,您必須進行一些手動設置來整合複製的模板,並且容易出錯並且存在風險。你需要非常瞭解postgres內部的知識。

這真的不值得。

相關問題