# 快速重建 Replication

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

# 步驟一:停下 postgresql server

service postgresql stop

# 步驟二:幹掉 Slave 的 data folder

WARNING

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

rm -rf /var/lib/postgresql/{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: 11: pg_basebackup(opens new window)

# 步驟四:添加 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 多久

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

# 參考資料

贊助商連結
(adsbygoogle = window.adsbygoogle || []).push({});