具有定期日誌傳送的 PostgreSQL 複製
我在兩台測試機器上都使用帶有 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 創建了一些文件,然後出於自身原因將它們的“上次修改”日期更改為過去的日期。