1. 程式人生 > 其它 >postgresql之物理複製與邏輯複製_非同步流複製部署

postgresql之物理複製與邏輯複製_非同步流複製部署

------------恢復內容開始------------

--物理複製,也稱為流複製(streaming replication),通過流複製複製一個一模一樣的備庫

--邏輯複製,也稱之為選擇性複製,可以做到基於表級別的複製,pg10之前的不支援內建的邏輯複製,pg10以後有支援內建的邏輯複製

WAL日誌記錄資料庫的變化,流複製和邏輯複製都是基於wal的,流複製基於wal物理複製,邏輯複製基於wal邏輯解析

非同步流複製部署

配置postgresql.conf檔案

wal_level = replica

archive_mode = on

archive_command ='/bin/date'

max_wal_senders = 10

wal_keep_segments = 512

配置主,備庫pg_hba.conf檔案

host replication repuser 192.168.12.10/32 trust
host replication repuser 192.168.12.11/32 trust

建立流複製使用者

postgres=# create user repuser replication login connection limit 5 encrypted password 'Aa123456';
CREATE ROLE

在主庫執行(主庫發起一個線上備份,執行成功後將檔案拷貝至備節點)

postgres=# select pg_start_backup('france_bk1');
tar czvf data.tar.gz data --exclude=data/pg_wal
scp data.tar.gz postgres@192.168.12.11:/home/postgres

主庫執行以下命令:

postgres=# select pg_stop_backup();
Sun Oct 31 23:29:04 EDT 2021
Sun Oct 31 23:29:04 EDT 2021
NOTICE:  pg_stop_backup complete, all required WAL segments have been archived
 pg_stop_backup
---------------- 0/B000130 (1 row)

在備庫配置recovery.conf檔案

[postgres@localhost ~]$ cat /database/pg10/pg_root/recovery.conf

standby_mode = on

#primary_conninfo = 'host=192.168.12.10 port=1921 user=repuser password=Aa123456'
primary_conninfo = 'host=192.168.12.10 port=1921 user=repuser'
recovery_target_timeline = 'latest'

配置 ~/.pgpass檔案,注意最好不要把密碼寫在recovery.conf檔案中

最開始配置pgpass指令碼沒有在正確目錄。或者recovery.conf檔案中沒有寫入密碼就會有以下報錯

配置完~/.pgpass檔案之後啟動備庫

在主機上檢視備庫是否存在,並建立測試表

在備機上檢視,並且測試建立表,出現以下報錯(只支援讀)

注意:備庫的postgresql.conf的hot_standy=on才支援查詢操作,調整此引數後重啟生效,如果設定成off就會出現以下報錯