------------恢復內容開始------------
--物理復制,也稱為流復制(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就會出現以下報錯