pg rewind增量同步備庫

2021-09-20 14:14:19 字數 2760 閱讀 4945

/*

在資料庫變得比較大時, 例如上tb, 如果部署了postgresql primary-standby 流複製或者log shipping ha.

當發生了failover, old primary節點可能因為某些原因需要重新同步資料. 

在廣域網上, 由於網路異常也可能造成standby節點落後主節點, 導致需要重新同步資料.

小資料庫重新同步資料很方便, 全量或者使用rsync增量同步都可以. 

但是資料庫很大的情況下, rsync也會變得非常慢, 而且大量消耗主機io資源. 

postgresql 社群有提議在核心中加入通過wal檔案解析, 達到增量同步到目的

*/--配置9.5版本的主從環境

--在pg的9.5版本中 checkpoint_segments引數已經被移除

--max_wal_size 換算大小 ,

--max_wal_size = (3 * checkpoint_segments) * 16mb

max_wal_size = 1gb

--pg_rewind 前提條件

1. full_page_writes

2. wal_log_hints 設定成 on 或者 pg 在初始化時開啟 checksums 功能

--檢視從庫的配置恢復檔案

[postgres@rudy_01 5430]$ grep ^[a-z] recovery.conf 

standby_mode = on

recovery_target_timeline = 'latest'

primary_conninfo = 'host=rudy_01 port=5431 user=repuser'

trigger_file = '/usr/local/postgresql/9.5/5430/postgresql.trigger.5430'

--啟動備庫為主庫

touch /usr/local/postgresql/9.5/5430/postgresql.trigger.5430

--在原來的備機點上插入測試資料

create table test_2(id int4);

insert into test_2(id) select n from generate_series(1,10000) n;

--在主機點上停止原主機點資料庫

[postgres@rudy_01 5430]$  pg_controldata | grep cluster

database cluster state:               in production

[postgres@rudy_01 5430]$ pg_ctl stop -m fast -d $pgdata

waiting for server to shut down.....

server stopped

--備註:停完原主庫後,千萬不能立即以備節點形式拉起老庫,否則在執行 pg_rewind 時會報,"target server must be shut down cleanly" 錯誤

-- 如果有如下錯誤

target server needs to use either data checksums or "wal_log_hints = on"

--備註:資料庫在 initdb 時需要開啟 checksums 或者設定  "wal_log_hints = on"

--注意要備份好原來主庫的配置檔案,因為pg_rewind會把配置檔案也同步過來覆蓋原來的配置檔案

cp pg_hba.conf pg_hba.bak

cp postgresql.conf postgresql.bak

--在原主庫上執行pg_rewind上操作

--千萬注意,如要在原主庫關閉之前,又對資料庫進行了增刪查改,它們會對覆蓋

pg_rewind --target-pgdata $pgdata --source-server='host=rudy_01 port=5430 user=postgres dbname=postgres password=123456' -p 

connected to server

servers diverged at wal position 0/9decbc0 on timeline 2

rewinding from last common checkpoint at 0/6000138 on timeline 2

reading source file list

reading target file list

reading wal in target

need to copy 196 mb (total source directory size is 213 mb)

201117/201117 kb (100%) copied

creating backup label and updating control file

done!

--在原來的主庫上建立複製配置檔案

cat recovery.conf 

standby_mode = on

recovery_target_timeline = 'latest'

primary_conninfo = 'host=rudy_01 port=5430 user=repuser'

trigger_file = '/usr/local/postgresql/9.5/5431/postgresql.trigger.5431'

--啟動原主庫做備庫使用

pg_ctl start -d $pgdata

innobackupex備份(全備 增量備)與恢復

安裝教程請檢視這篇文章 innobackupex備份選項 user 指定資料庫備份使用者 password 指定資料庫備份使用者密碼 port 指定資料庫埠 host 指定備份主機 socket 指定socket檔案路徑 databases 備份指定資料庫,多個空格隔開,如 databases db...

gitlab主備同步 gitlab主備同步

主 10.10.10.75 備 10.10.10.16 方案思路 mysql主從同步 gitlab檔案目錄同步 inotify rsync 一,配置mysql主從同步 mysql版本 5.5.43 修改75的mysql配置檔案 vim etc mysql my.cnf server id 1 bin...

mysql增量備份幾種 mysql的增量備份

一 啟用 binary log 修改 mysql server 的系統設定檔案 eg.etc my.cnf 在 mysqld 區塊中加上 log bin mysql bin 選項,然後重新啟動 mysql server,例如 mysqld log bin 啟用後你應該可以在 mysql 的 data...