#準備
PostgreSQL12.3版本容器兩臺,部署參考https://www.cnblogs.com/zspwf/p/16113298.html
主庫: 192.168.3.14:2200
從庫: 192.168.3.14:2201
#主庫
1.新建用于復制的用戶
CREATE ROLE replicate WITH LOGIN PASSWORD 'xyz!345' REPLICATION ;

2.往主庫的pg_hba.conf檔案追加以下內容,其中192.168.3.14為從庫IP,/data/nismes/bd-test/為映射容器目錄,未映射請進入容器執行
METHOD引數決議
md5是常用的密碼認證方式,如果你不使用ident,最好使用md5,密碼是以md5形式傳送給資料庫,較安全,且不需建立同名的作業系統用戶,
password是以明文密碼傳送給資料庫,建議不要在生產環境中使用,
trust是只要知道資料庫用戶名就不需要密碼或ident就能登錄,建議不要在生產環境中使用,
reject是拒絕認證,
#映射執行
echo "host replication replicate 192.168.3.14/32 trust" >> /data/nismes/bd-test/pg_hba.conf
#未映射執行
docker exec -it 容器id /bin/bash
echo "host replication replicate 192.168.3.14/32 trust" >> /var/lib/postgresql/data/pg_hba.conf


3.主庫開啟歸檔模式
方式1
ALTER SYSTEM SET archive_command = ON ;
ALTER SYSTEM SET archive_command ='cp -i %p /home/%f </dev/null';

方式二:打開postgresql.conf檔案,修改引數
4.主庫配置完成,重啟資料庫
#從庫
1.進入容器 ,執行命令
//將檔案備份至Home目錄
pg_basebackup -h 192.168.3.14 -p 2200 -U replicate -w -Fp -Xs -Pv -R -D /home
//覆寫資料目錄
cp -R /home/* /var/lib/postgresql/data/
//清空home目錄
rm -rf /home/*


2.設定備用服務器連接字串
primary_conninfo
指定備用服務器用來連接發送服務器的連接字串,這個字串的格式在libpq-connstring中描述, 如果在這個字串中有任何選項未被指定,那么將檢查相應的環境變數(見libpq-envars), 如果環境變數也沒有被設定,則使用默認值,
連接字串應當指定發送服務器的主機名(或地址),以及埠號(如果它和備用服務器的默認埠不同), 還要指定對應于發送服務器上合適權限角色的用戶名(見streaming-replication-authentication), 如果發送服務器要求口令認證,還需要提供一個口令,它可以在primary_conninfo字串中提供,或者在后備服務器(使用replication作為資料庫名)的一個單獨~/.pgpass檔案中提供, 不要在primary_conninfo字串中指定一個資料庫名,
這個引數只能在服務器啟動時被設定,如果服務器沒有處于備用模式,則此設定無效,
ALTER SYSTEM SET primary_conninfo = 'user=replicate passfile=''/root/.pgpass'' host=192.168.3.14 port=2200 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'; ALTER SYSTEM SET max_connections ='300';

3.重啟從庫
#測驗
主庫查看復制
select * from pg_stat_replication;

主庫創建資料庫測驗
CREATE TABLE test2(fc1 varchar(50),fc2 int);

主庫插入測驗
INSERT INTO test2 SELECT '測驗1',1
從庫查看
SELECT * FROM test2

從庫洗掉測驗
DROP TABLE test2

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/467101.html
標籤:PostgreSQL
下一篇:面試官:請用SQL模擬一個死鎖
