以下是在Debian上實現PostgreSQL復制功能的指南,支持流復制和邏輯復制兩種主流方式:
sudo apt update && sudo apt install postgresql postgresql-contrib
postgresql.conf
:listen_addresses = '*' # 允許所有IP連接
wal_level = replica # 啟用WAL日志
max_wal_senders = 10 # 最大復制連接數
wal_keep_segments = 64 # 保留WAL文件數量
hot_standby = on # 從服務器支持只讀查詢
pg_hba.conf
:host replication replicator <從服務器IP>/32 md5
CREATE ROLE replicator WITH REPLICATION PASSWORD '密碼' LOGIN;
sudo systemctl restart postgresql
sudo systemctl stop postgresql
pg_basebackup
初始化數據目錄,避免手動復制不一致)postgresql.auto.conf
(PostgreSQL 10+)或recovery.conf
(9.6及以下):standby_mode = 'on'
primary_conninfo = 'host=主服務器IP port=5432 user=replicator password=密碼'
restore_command = 'cp /var/lib/postgresql/archive/%f %p' # 歸檔恢復命令
trigger_file = '/tmp/postgresql.trigger' # 手動觸發故障轉移文件
sudo systemctl start postgresql
在從服務器執行:
SELECT * FROM pg_stat_replication; -- 查看復制進程狀態
CREATE PUBLICATION my_publication FOR ALL TABLES; -- 同步所有表
-- 或指定表:FOR TABLE table1, table2;
CREATE SUBSCRIPTION my_subscription
CONNECTION 'host=主服務器IP dbname=數據庫名 user=replicator password=密碼'
PUBLICATION my_publication;
在從服務器查詢表數據,確認與主服務器一致。
REPLICATION
權限和目標表的訪問權限。pg_stat_replication
和日志文件,確保復制正常。參考來源: