Postgres 11.4 pg_basebackup Permission denied

    報錯截圖:

Postgres 11.4 pg_basebackup  Permission denied
pg_basebackup: could not get write-ahead log end position from server: ERROR: could not open file "./.postgresql.conf.swn": Permission denied

一、環境準備:【生產環境】
1、
Master   PG host IP :172.17.16.16                  host name:hkzbxdb1
Standby PG host IP:172.17.16.18                   host name:hkzbxdb2

2、PG Cluster 理想環境是版本一致,所以主備庫版本如下:

Postgres 11.4 pg_basebackup  Permission denied

3、停止Firewalls防火牆【主備機】、初始化PG數據庫【主備機】、iptables規則配置【假如你用到/主備】;
4、Master host 配置:pg_hba.conf 和postgresql.conf;創建replication role賬戶repl;

Postgres 11.4 pg_basebackup  Permission denied

文件路徑:/var/lib/pgsql/11/data/pg_hba.conf
配置pg_hba.conf
keepalives 參數非必須,主要是監控TCP連接狀態使用;

Postgres 11.4 pg_basebackup  Permission denied

/var/lib/pgsql/11/data/postgresql.conf 

Postgres 11.4 pg_basebackup  Permission denied
Postgres 11.4 pg_basebackup  Permission denied

配置流複製功能WAL歸檔這部分可以不用配置,當然也可以採用"流複製+WAL連續歸檔"的容災方案;

Postgres 11.4 pg_basebackup  Permission denied

這幾個replication參數比較重要,可以根據自己的需求調整參數值,更多詳細信息建議參考官網文檔https://www.postgresql.org/docs/11/warm-standby.html:

Postgres 11.4 pg_basebackup  Permission denied

備註:"WAL知識點參考信息,來自PG官網"

Postgres 11.4 pg_basebackup  Permission denied

至此,環境準備完畢。

二、理論準備
       啓動流複製
       在Streaming Replication中,三種進程協同工作。甲walsender主服務器上的過程發送WAL數據到備用服務器; 然後,備用服務器上的walreceiver和啓動進程接收並重放這些數據。walsender和walreceiver使用單個TCP連接進行通信。
       流複製的啓動順序圖:

Postgres 11.4 pg_basebackup  Permission denied

(1)啓動主服務器和備用服務器。
(2)備用服務器啓動啓動過程。
(3)備用服務器啓動walreceiver進程。
(4)walreceiver向主服務器發送連接請求。如果主服務器未運行,則walreceiver會定期發送這些請求。
(5)當主服務器收到連接請求時,它啓動walsender進程並在walsender和walreceiver之間建立TCP連接。
(6)walreceiver發送備用數據庫集羣的最新LSN。一般而言,這一階段被稱爲信息技術領域的握手。
(7)如果備用的最新LSN小於主要的最新LSN(備用的LSN <主要的LSN),則walsender將WAL數據從前LSN發送到後一個LSN。這樣的WAL數據由存儲在主要的pg_xlog子目錄(版本10或更高版本,pg_wal子目錄)中的WAL段提供。然後,備用服務器重放接收的WAL數據。在此階段,備用數據庫趕上主數據庫,因此稱爲追趕。
(8)流複製開始起作用。
每個walsender進程保持適合連接的walreceiver或任何應用程序的工作階段的狀態(請注意,它不是連接到walsender的walreceiver或應用程序的狀態。)以下是它的可能狀態:

啓動 - 從啓動walsender到握手結束。見圖。(5) - (6)。
追趕 - 在追趕階段。見圖(7)。
流 - 雖然流複製正在運行。見圖(8)。
backup - 在爲pg_basebackup實用程序等備份工具發送整個數據庫集羣的文件期間。
該pg_stat_replication視圖顯示所有正在運行的walsenders的狀態。一個例子如下所示:  

Postgres 11.4 pg_basebackup  Permission denied

三、"ERROR:  could not open file "./.postgresql.conf.swn": Permission denied",解決思路;
    1、根據報錯提示查找文件及路徑;
          # locate .postgresql.conf.swn  
                /var/lib/pgsql/11/data/.postgresql.conf.swn
    2、根據搜索結果,查看/var/lib/pgsql/11/data/l路徑下的所有文件【含隱藏】及權限;
          # ls -la /var/lib/pgsql/11/data/
                正確的權限如下截圖,可以對比看,如果不匹配修改對應紅色框內的權限

Postgres 11.4 pg_basebackup  Permission denied

    3、權限修改命令
            # chmod -R 700           /var/lib/pgsql/11/data                             變更data及子目錄文件權限爲RWX
             # chgrp   -R postgres   /var/lib/pgsql/11/data                             變更data及子目錄文件所屬組爲postgres
             # chown  -R postgres  /var/lib/pgsql/11/data                              變更data及子目錄文件所有者爲postgres       
 4、以上是針對MAster Host修改;需要注意的是修改完畢之後記得重啓PG服務器或系統;
 5、在Standby Host主機上登錄postgres賬戶,然後執行pg_basebackup命令從主庫異步複製PG數據資料;
             #su - postgres                                                                         從ROOT或其他賬戶切換到postgres賬戶
             # pg_basebackup -D $PGDATA -Fp -Xs -v -P -h 172.17.16.16 -p 5432 -U repl
             "備註:A.至此,正常的情況是,你可以在/var/lib/pgsql/11目錄下看到data文件變大,且data下的文件和主庫保持一致;
                         B.如果,你在執行pg_basebackup 命令後,提示:“/var/lib/pgsql/11/data”存在且不爲空,那麼你需要執行C,然後重新執行pg_basebackup命令.
                         C.執行,備份原data並新建data,Command:
                                    #mv /var/lib/pgsql/11/data /var/lib/pgsql/11/data_back
                                    #mkdir /var/lib/pgsql/11/data
                                    "

Postgres 11.4 pg_basebackup  Permission denied

    6、備庫重啓PG服務,然後對比主從庫信息會發現此時兩邊數據庫信息是一致的,"問題解決".

Postgres 11.4 pg_basebackup  Permission denied
Postgres 11.4 pg_basebackup  Permission denied

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章