2009-08-03 90 views
7

我有一個腳本,將產生每日輪換備份的MySQL,但我找不到任何類似的postgres。我還發現它具有在線備份功能,因爲這是一個生產站點,所以應該派上用場。有誰知道備份postgres數據庫的好方法嗎?

有誰知道一個程序/腳本,將幫助我,甚至一種方式來做到這一點?

謝謝。

回答

18

一種方法是usepg_dump生成一個平面的sql轉儲,你可以gzip或其他。這當然是最簡單的選擇,因爲結果可以重新輸入到psql以重新加載數據庫,並且由於它也可以作爲純文本輸出,所以如果需要,可以在恢復之前查看或編輯數據。

下一個方法是暫時關閉你的數據庫(或者如果你的文件系統支持原子快照,理論上可能工作)和你的PostgreSQL data目錄。

This來自PostgreSQL站點的頁面也解釋瞭如何進行聯機備份和時間點恢復,這絕對是最難配置的,也是最佳方法。這個想法是通過運行一些特殊的SQL(pg_start_backuppg_stop_backup)來執行基本備份(您可能每天,幾天或每週都會這樣做)並創建數據庫目錄的(文件系統級別)副本。數據庫在此期間不會脫機,並且所有內容仍然正常工作。從此,數據庫會生成任何更改的預寫日誌(WAL),然後可以將其自動(由數據庫)推送到任何您想要的位置。要恢復,請執行基本備份,將其加載到另一個數據庫實例中,然後僅重播所有WAL文件。這樣,您也可以通過不重播所有日誌來進行時間點恢復。

+0

使用原子快照不只是「可能在理論上形成了」備份

pg_restore -v -d newdb_name db_dump_file.dump 

閱讀。它工作得很好。但是它們需要在PostgreSQL有數據的* all *文件系統中是原子的,包括pg_xlog目錄。 – 2009-08-03 16:36:24

2

一般做備份的方式是使用pg_dump。因爲你很可能無法使用它們(這些文件是依賴於體系結構,操作系統和編譯選項的),所以你不應該「從postgresql目錄複製文件,就像在mysql中一樣」。

除非pg_dump是證明是不夠的 - 這是你應該使用的。在你將遇到pg_dump無法使用的情況 - 你應該問自己:爲什麼它不能被使用,以及你能做些什麼來再次使用它:

當你使用pg_dump時,你可能會選擇普通的SQL文件轉儲(-F p)或自定義格式(-F c)。 SQL轉儲更容易修改/更改,但自定義格式功能更強大,並且(從8.4開始)加載速度更快,因爲您可以將其加載到許多並行工作人員中,而不是按順序加載。

3

對於MySQL 的自動備份,請查看astrails-safe on github(或者只是「gem install astrails-safe --source=http://gems.github.com」)。 它使用mysqldump來備份MySQL和pg_dump來備份Postgres。它還知道如何使用tar備份純文件,並用GnuPG加密所有文件並上傳到S3或任何帶有SFTP的Unix服務器。

2

由於您指定了databaseS,因此pg_dumpall將對您更有用。它將所有數據庫和用戶轉儲到一個sql文件,而不是一個。

0

這個腳本是什麼,我會做備份我的舊的數據庫和恢復

備份您的數據庫

pg_dump --format=c olddb_name > db_dump_file.dump 

要恢復更多的pg_dumppg_restore

相關問題