Postgresql

具有定期日誌傳送的 PostgreSQL 複製

  • September 9, 2014

我在兩台測試機器上都使用帶有 64 位 PostgreSQL 9.2 的 Windows Server 2008 R2。我希望實現的是一台伺服器將成為主伺服器,而另一台伺服器將成為從伺服器。這只是為了測試,最終伺服器將在 1 master - N slaves 場景中工作。每 24 小時一次,來自 master 的所有更改都將在 slave(s) 上複製。

我決定使用沒有流式傳輸的本機複製(不需要)。理想情況下,我希望手動(通過一些腳本)向從站提供所需的 WAL,重新啟動機器並讓它自行更新。

所以我設置了我的主人:

postgresql.conf:
wal_level = hot_standby
archive_mode = on
archive_command = 'copy "%p" "C:\\archive\\%f"'

還有我的從機:

postgresql.conf:
hot_standby = on

recovery.conf:
restore_command = 'copy "C:\\archive\\%f" "%p"'

然後我啟動了master機器,我寫了一些東西到數據庫。我執行了pg_start_backup('base');命令。然後,用來自主伺服器的文件替換從伺服器上的整個“數據”文件夾(只是沒有配置和 postmaster.pid 文件)。現在,我pg_stop_backup();在我的主人和奴隸的存檔文件夾之間執行並複制了文件。啟動從屬伺服器的 PostgreSQL 服務後,一切都很順利——數據庫就在那裡。

我從存檔文件夾中刪除了 WAL,在主數據庫中做了一個小改動,再次使用 stop_backup 啟動備份,複製了 WAL,然後……它不起作用。我什至嘗試了最簡單的情況——第一次複製後它工作後,我重新啟動了服務。再次失敗。每次它記錄:

WARNING:  WAL was generated with wal_level=minimal, data may be missing
HINT:  This happens if you temporarily set wal_level=minimal without taking a new base backup.
FATAL:  hot standby is not possible because wal_level was not set to "hot_standby" on the master server
HINT:  Either set wal_level to "hot_standby" on the master, or turn off hot_standby here.
LOG:  startup process (PID 4320) exited with exit code 1
LOG:  aborting startup due to startup process failure

我仔細檢查了我的配置,它們很好;沃爾級別顯然設置為hot_standby。知道我在做什麼錯嗎?

這很可能是我的一個問題。我決定再做一次,但這次按照這裡的優秀指南進行完整的流複製:https ://www.youtube.com/watch?v=Zq4zS0ZbXsc

然後,我從流部分中剝離了這個解決方案(從 hba 文件中刪除了連接,並從 recovery.conf 中刪除了一行)。以防萬一有人想要實現類似的解決方案 - 不要按“上次修改”日期比較 WAL 文件!您有興趣在“創建”日期之前複製更新的 WAL。這是因為 PostgreSQL 創建了一些文件,然後出於自身原因將它們的“上次修改”日期更改為過去的日期。

引用自:https://dba.stackexchange.com/questions/75441