2009-02-05 143 views
9

A)定期備份大型PostgreSQL數據庫(在最新的Ubuntu服務器上運行的8.3版本)的最佳解決方案是什麼?請不要說那些痛苦的緩慢插入語句PostgreSQL還原和備份解決方案

B)什麼是PostgreSQL數據庫複製的最佳解決方案,在現實世界中工作

+0

pg_dump默認不使用插入語句。它將默認使用COPY命令。 -d或--inserts的命令行開關將導致pg_dump將插入語句放入導出中。你的意思是COPY太慢了嗎?或者您是否使用-d或--inserts命令開關? – 2009-02-05 14:57:57

回答

4

A. pg_dump默認不使用插入語句。它將默認使用COPY命令。 -d或--inserts的命令行開關將導致pg_dump將插入語句放入導出中。如果您的pg_dump命令中有這些開關中的任何一個,只需將其刪除以使pg_dump使用COPY。

B.在即將發佈的Postgres版本中,他們將有simple replication開箱。我認爲8.4版即將推出。所以,如果可能的話,這可能值得一提。

2

你可以在夜間使用組合或許Online WAL-Backup pg_dump的/每天/每週/每月pg_dumps。每週/每月一次,您應該複製整個集羣。

恢復工作相當好,當你早期複製時(rsync最好,因爲它非常有效),你幾乎不會丟失數據。

速度很好,因爲它只需要應用晚於最近完整羣集備份/複製的WAL。

6

我認爲那只有一個答案。

PITR或時間點恢復。它基本上是存檔事務日誌,據我所知,是進行備份的最佳方式。

我爲8.1設置了幾次,但它應該是8.3。

在postgresql.conf所有你需要做的是補充一點:

archive_command = 'test ! -f /path/to/your/backups/archive_logs/%f && cp -i %p /path/to/your/backups/archive_logs/%f </dev/null' 

此命令將歸檔日誌到指定的目錄,在那裏你可以安全地使用的備份軟件進行備份您的選擇。

要進行完整備份,您需要先告訴PostgreSQL您正在進行備份。 它通過psql命令psql "SELECT pg_start_backup('my_backup');" 完成之後,只需將數據目錄與rsync,cpio或其他工具複製即可。如果數據庫被大量使用,那麼這些文件將在複製過程中發生變化,所以重要的是該工具可以正確處理並且不需要保護。

複製完成後,運行psql "SELECT pg_stop_backup();"告訴PostgreSQL再次停止它。這些命令所做的是在備份開始的歸檔日誌中放置一個標記,因此在恢復時,它會知道從哪裏開始讀取。

此技術也可以用於複製的熱備份,但它不會被讀取,只是在緊急情況下準備好接管。 我認爲完全熱備份是8.4版本,所以在那之前我不認爲有另一種選擇。

如果您使用PITR,一件好事就是您可以指定一個時間戳,以便您想要追加存檔日誌。因此,它也可以將數據庫從事故中拯救出來(如刪除或更改某些數據)