1. 程式人生 > >CentOS7中PotsgreSQL11雙機備份

CentOS7中PotsgreSQL11雙機備份

根據蒐集的資料安裝測試並在安裝測試過程中整理的文件,如有不足希望不吝賜教。


目錄

​​​​​​​一、環境介紹

二、主節點配置

1.修改配置檔案

2.建立超級使用者

3.基礎備份

三、配置備節點

1.修改配置檔案

四、查詢主備

1.pg_controldata命令

2.字典表pg_stat_replication

3.程序資訊識別

4.通過pg函式


一、環境介紹

系統:兩臺CentOS7.5

ip:172.17.0.84(主)、172.17.0.86(備)

資料庫版本:PotsgreSQL11

主從流複製配置:https://www.cnblogs.com/yjf512/p/4499547.html

 

二、主節點配置

1.修改配置檔案

使用postgres使用者:su - postgres

進入data目錄(實際目錄可能不同):cd /var/lib/pgsql/11/data

修改配置檔案:vim postgresql.conf

編輯檔案內容,找到如下設定項並修改:

wal_level = hot_standby		# 這個是設定主為wal的主機
max_wal_senders = 1		# 這個設定了可以最多有幾個流複製連線,差不多有幾個從,就設定幾個
wal_keep_segments = 500	  # 設定流複製保留的最多的xlog數目
hot_standby = on
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%a.log’

上邊配置項部分需要取消註釋,日誌配置如果已經有,保持預設即可。修改完成後儲存退出。

2.建立超級使用者

登入資料庫,在主節點資料庫中建立一個超級使用者,standby資料庫會使用這個使用者連線到主庫上拖WAL日誌。

psql

下面建立使用者命令是在登入資料庫後執行:

create user standby SUPERUSER LOGIN password 'standby';

3.基礎備份

開啟備份功能

psql -c "select pg_start_backup('backup0001')"

使用scp命令將data目錄下資料遠端拷貝到備庫data目錄下:

scp -r /var/lib/pgsql/11/data/* 172.17.0.86:/var/lib/pgsql/11/data/

因為上面的命令會預設使用postgresql建立的使用者postgres,因此此處使用了root使用者傳送,但是需要在傳送完成後在備機上修改檔案屬組,直接遞迴將整個data目錄的使用者和組全部修改即可(chown -R postgres:postgres data/)。

scp -r /var/lib/pgsql/11/data/* [email protected]:/var/lib/pgsql/11/data/

關閉備份功能

psql -c "select pg_stop_backup()"

修改完成後重啟主資料庫。

 

三、配置備節點

1.修改配置檔案

修改data目錄下postgresql.conf檔案,把其中的hot_standby設定為on。

拷貝示例檔案/usr/pgsql-11/share/recovery.conf.sample到/var/lib/pgsql/11/data/目錄下,然後改名成recovery.conf:

mv recovery.conf.sample recovery.conf

編輯(vim)recovery.conf修改相關的配置項為如下內容:

standby_mode = 'on'
primary_conninfo = 'host=172.17.0.84 port=5432 user=standby password=standby'

修改完成後儲存退出,然後重啟從資料庫。

 

四、查詢主備

1.pg_controldata命令

首先切換到postgres使用者(已經切換忽略):su - postgres

然後使用pg_controldata命令檢視狀態,這裡需要注意的是,pg_controldata命令並不一定是在data目錄下,也不一定可以直接使用,因此可以用find命令(find / -name pg_controldata)查詢pg_controldata位置,然後再使用命令的完整路徑檢視。

本次完整路徑為:/usr/pgsql-11/bin/pg_controldata,執行命令檢視:

主機:

備機:

可以看到主機的cluster state是in production,備機的cluster state是in archive recovery。

2.字典表pg_stat_replication

在postgres使用者下,登入資料庫,然後使用下面查詢語句:

select pid,application_name,client_addr,client_port,state,sync_state from pg_stat_replication;

在主機字典表中是能查到記錄,備機中是查詢不到的。如下:

主機:

備機:

3.程序資訊識別

使用命令ps -ef|grep postgres檢視程序,可以通過程序資訊識別主備機。如下:

主機:

備機:

4.通過pg函式

在postgres使用者下,登入資料庫,然後使用下面查詢語句:

select pg_is_in_recovery();

主機是f,備機是t。

主機:

備機:


END