以下是在Ubuntu上使用PostgreSQL復制功能的步驟(以流復制為例):
192.168.1.10
,從庫IP為192.168.1.11
。修改配置文件
/etc/postgresql/15/main/postgresql.conf
:wal_level = replica # 啟用WAL日志
max_wal_senders = 5 # 允許最大復制連接數
wal_keep_size = 128MB # 保留WAL日志大小
hot_standby = on # 允許從庫只讀
listen_addresses = '*' # 監聽所有IP
/etc/postgresql/15/main/pg_hba.conf
:host replication replicator 192.168.1.11/32 md5 # 允許從庫IP通過復制用戶連接
sudo systemctl restart postgresql
創建復制用戶
sudo -u postgres psql
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'your_password';
\q
清空數據目錄并拉取主庫數據
sudo systemctl stop postgresql
sudo rm -rf /var/lib/postgresql/15/main/*
sudo -u postgres pg_basebackup -h 192.168.1.10 -D /var/lib/postgresql/15/main -U replicator -P --wal-method=stream
(需輸入復制用戶密碼)
配置postgresql.conf
hot_standby = on
(PostgreSQL 12+無需recovery.conf
,參數直接寫入主配置文件)
啟動從庫
sudo systemctl start postgresql
sudo -u postgres psql
SELECT * FROM pg_stat_replication; # 查看從庫連接信息
wal_level = logical
max_replication_slots = 5
-- 主庫:創建發布
CREATE PUBLICATION pub_all FOR ALL TABLES;
-- 從庫:創建訂閱
CREATE SUBSCRIPTION sub_all CONNECTION 'host=192.168.1.10 port=5432 dbname=postgres user=replicator password=your_password'
PUBLICATION pub_all;
(邏輯復制需在從庫手動創建表結構,僅同步數據變更)archive_mode
和WAL歸檔,防止數據丟失。synchronous_commit = on
和synchronous_standby_names
,但可能影響主庫性能。參考來源: