贊助商連結

PostgreSQL 快速重建 replication

by 瘋人院院長

身為一個不專業管理 Server 的工程師,三不五時 slave PostgreSQL server 就會因為磁碟空間爆滿而停止 replicate,正因為經過多次的訓練,悟得 PostgreSQL 快速重建 replication 的步驟

步驟一:停下 postgresql server

service postgresql stop

步驟二:幹掉 Slave 的 data folder

千萬要注意,別幹錯 Server 把 Master 的刪掉喔

rm -rf /var/lib/{version}/main

步驟三:用 pg_basebackup 拉 data folder

用 pg_basebackup 直接從 Master 把 data folder 抓下來

pg_basebackup -h {host} -U {user} -D /var/lib/postgresql/{version}/main --progress --verbose -c fast -Fp -Xs -v -P

其他參數可參考官方說明

PostgreSQL: Documentation: 10: pg_basebackup

步驟四:添加 recovery.conf

recovery.conf 是告訴 progresql 要作為 slave server 的檔案,可以在步驟二時先備份下來

vi /var/lib/{version}/main/recovery.conf

步驟五:確認權限為 postgres

如果跟院長一樣,是使用 root 去抓 master 資料,要記得把權限改為 postgres

chown -R postgres:postgres main

步驟六:重新啟動 postgresql

service postgresql start

步驟七:檢查 slave 是否有恢復 replicate

在 master server 執行這條 SQL

SELECT client_addr, state, sent_location, write_location, flush_location, replay_location  
FROM pg_stat_replication;

有看到 client_addr 就表示剛剛重建的 replication 有成功接上 master

在 slave server 執行這條 SQL

SELECT now() — pg_last_xact_replay_timestamp() AS replication_delay;

可以看 slave 與 master 之間 delay 多久

niwi.nz : Show replication status in PostgreSQL

以上七步驟就是院長悟出最快速重建 PostgreSQL replication 的步驟

記得認同請分享、拍手、按 Like 喔!

參考資料

PostgreSQL的流复制工具pg_basebackup使用 - kenyon的个人页面 - 开源中国


喜歡我們的文章可以按上面的 LIKE 給我們鼓勵喔!