您好,登錄后才能下訂單哦!
1.創建復制用戶:
CREATE USER repl WITH replication login password 'repl';
2.編輯recovery文件:
cat /pgdata/10/data/recovery.conf
sync:
standby_mode = 'on'
primary_conninfo = 'host=192.168.56.202 port=5432 user=postgres application_name=db3 user=repl password=repl keepalives_idle=60 keepalives_interval=5 keepalives_count=5'
restore_command = ''
recovery_target_timeline = 'latest'
主庫的配置文件postgresql.conf添加如下內容:
synchronous_standby_names = 'db3'
pg_ctl reload
async:
recovery_target_timeline = 'latest'
standby_mode = on
restore_command = ''
primary_conninfo = 'host=192.168.56.202 port=5432 user=repl password=repl'
3.在db3上執行,ip:192.168.56.203:
pg_basebackup -D /pgdata/10/data -Fp -Xs -v -P -h 192.168.56.202 -p 5432 -U repl
pg_basebackup: initiating base backup, waiting for checkpoint to complete ##如果在這一步出現夯住不動,可以在主庫上手動執行checkpoint; 命令。
pg_basebackup: checkpoint completed
transaction log start point: 460B/6F006F68 on timeline 16
pg_basebackup: starting background WAL receiver
4.啟動數據庫:
pg_ctl start
5.檢查主備庫角色:
a.主庫檢查復制狀態:
select * from pg_stat_replication;
備庫:
ps -ef |grep postgres |grep receiver
主庫:
ps -ef |grep postgres |grep sender
b.SELECT pg_is_in_recovery();
如果返回t說明是備庫,返回f說明是主庫。
c.查看數據庫控制信息:
pg_controldata |grep cluster
主:Database cluster state: in production
備:Database cluster state: in archive recovery
d.查詢pg_stat_replication視圖:
主庫上面有記錄,備庫無記錄;
備注:
如果使用pha4pgsql,檢查登錄分布式事務,保證無密碼可以登錄:
psql -U postgres -h 10.11.55.31 -p 5432 -d postgres
6.postgresql主備切換步驟:
a.關閉主庫,建議使用-m fast模式關閉:
pg_ctl stop -m fast
b.在備庫上執行pg_ctl promote 命令激活備庫,如果recovery.conf 變成recovery.done表示備庫已切換成為主庫:
pg_ctl promote
c.將老的主庫切換成備庫,在老的主庫的$PGDATA目錄下創建recovery.conf 文件( 如果此目錄下不存在recovery.conf文件,
可以根據$PGHOME/recovery.conf.sample 模板文件復制一個,如果此目錄下存在recovery.done 文件,需將recovery.done 文件
重命名為recovery.conf) ,配置和老的從庫一樣,只是primary conninfo 參數中的IP換成對端IP 。
cat recovery.conf
recovery_target_timeline = 'latest'
standby_mode = on
restore_command = ''
primary_conninfo = 'host=192.168.56.203 port=5432 user=repl password=repl'
d.啟動老的主庫,這時觀察主、備進程是否正常,如果正常表示主備切換成功。
7.查詢備庫接受的lsn和日志名字相關信息:
9.x:
備庫查詢接受的日志lsn:
SELECT pg_last_xlog_receive_location();
select pg_last_xlog_replay_location();
通過函數pg_xlogfile_name確定具體的日志:
select pg_xlogfile_name(pg_last_xlog_replay_location());
兩個WAL日志位置的偏移量:
SELECT pg_xlog_location_diff('4741/620E4CC8','4741/620E4CC9') ;
顯示日志最近應用的時間:
SELECT pg_last_xact_replay_timestamp();
10.x:
在備庫執行:
SELECT pg_last_wal_receive_lsn();
SELECT pg_last_wal_replay_lsn();
在主庫根據備庫查出的lsn查出具體的日志:
select pg_walfile_name('xxxxxx');
兩個WAL日志位置的偏移量:
SELECT pg_wal_lsn_diff('4741/5B7C9488','4741/5D744000') ;
顯示日志最近應用的時間:
SELECT pg_last_xact_replay_timestamp();
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。