天天看點

PostgreSQL 12: Recovery.conf 檔案參數合并到 postgresql.conf發行說明pg_basebackup 指令差異recovery.conf 不再支援總結參考新書推薦

PostgreSQL 12 的一個重要變化是 recovery.conf 配置檔案中的參數合并到 postgresql.conf,recovery.conf 不再使用,我們看看手冊的說明,如下:

發行說明

Move recovery.conf settings into postgresql.conf (Fujii Masao, Simon Riggs, Abhijit Menon-Sen, Sergei Kornilov)

recovery.conf is no longer used, and the server will not start if the file exists. recovery.signal and standby.signal are now used to switch into non-primary mode. trigger_file has been renamed to promote_trigger_file. The standby_mode setting has been removed.

手冊提到變化資訊不少,包括以下幾點:

  • recovery.conf 配置檔案不再支援,此檔案中的參數合并到 postgresql.conf,若 recovery.conf 存在,資料庫無法啟動
  • 新增 recovery.signal 辨別檔案,表示資料庫處于 recovery 模式
  • 新增加 standby.signal 辨別檔案,表示資料庫處于 standby 模式
  • trigger_file 參數更名為 promote_trigger_file
  • standby_mode 參數不再支援

以上變化對于部署 PostgreSQL 流複制有哪些地方需要注意?本文本簡單示範,流複制的部署可參考

PostgreSQL:使用 pg_basebackup 搭建流複制環境

pg_basebackup 指令差異

12 版本

pg_basebackup

指令的 -R 參數的效果和之前不同,主要展現在:

  • 指令執行後在 $PGDATA 目錄建立 standby.signal 辨別檔案,檔案内容為空
  • 指令執行後在 $PGDATA 目錄的 postgresql.auto.conf 檔案中添加 primary_conninfo 參數資訊

接着驗證下,測試環境資訊如下:

pghost1 192.168.2.11 主節點
pghost2 192.168.2.12 備節點           

在 pghost2 執行

pg_basebackup

指令,如下:

[pg12@pghost2 pg12]$ pg_basebackup -R -D /pgdata/pg12/pg_root -Fp -Xs -v -P -h 192.168.2.11 -p 1921 -U repuser
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/5B000028 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: created temporary replication slot "pg_basebackup_34159"
1144035/1144035 kB (100%), 2/2 tablespaces
pg_basebackup: write-ahead log end point: 0/5B000138
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: syncing data to disk ...
pg_basebackup: base backup completed           

驗證 standby.signal 檔案,如下:

[pg12@pghost2 pg_root]$ ll $PGDATA/standby.signal
-rw-------. 1 pg12 pg12 0 Jul 18 10:30 /pgdata/pg12/pg_root/standby.signal           

驗證 postgresql.auto.conf 檔案,如下:

[pg12@pghost2 pg_root]$ cat $PGDATA/postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
primary_conninfo = 'user=repuser passfile=''/home/pg12/.pgpass'' host=192.168.2.11 port=1921 sslmode=disable sslcompression=0 gssencmode=disable target_session_attrs=any'           

果然 $PGDATA 目錄下産生了 standby.signa 辨別檔案,同時 postgresql.auto.conf 配置檔案增加了 primary_conninfo 參數資訊。

之後啟動備庫,如下:

[pg12@pghost2 pg_root]$ pg_ctl start           

并驗證主備角色,流複制正常工作。

recovery.conf 不再支援

之前版本 PostgreSQL 的流複制備庫是通過在 $PGDATA 目錄中建立 recovery.conf 檔案來辨別的,這是流複制部署的重要檔案,若 $PGDATA 目錄下不存在此檔案,資料庫無法以流複制備庫角色啟動。

12 版本開始 recovery.conf 檔案不再支援,若資料目錄中存在此檔案,資料庫啟動報錯。

總結

雖然 PostgreSQL 12 部署流複制在操作層面和之前版幾乎沒有差別,但在處理機制上 12 版本和之前版本相差較大,同時

pg_basebackup

指令的 -R 參數的效果也和之前版本不一樣,這些是需要注意的地方。

參考

源文連結:

https://postgres.fun/20190718155800.html

新書推薦

最後推薦和張文升共同編寫的《PostgreSQL實戰》,本書基于PostgreSQL 10 編寫,共18章,重點介紹SQL進階特性、并行查詢、分區表、實體複制、邏輯複制、備份恢複、高可用、性能優化、PostGIS等,涵蓋大量實戰用例!

PostgreSQL 12: Recovery.conf 檔案參數合并到 postgresql.conf發行說明pg_basebackup 指令差異recovery.conf 不再支援總結參考新書推薦