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就會出現以下報錯