Primary、从库Standby),安装相同版本的PostgreSQL(如15.x)。192.168.1.10)、从库IP(如192.168.1.11)可达。sudo apt install postgresql postgresql-contrib完成)。postgresql.conf(路径:/etc/postgresql/<版本>/main/postgresql.conf),调整以下参数:wal_level = replica # 启用WAL日志(复制基础)
max_wal_senders = 5 # 允许的最大复制连接数
wal_keep_size = 128MB # 保留WAL日志大小(避免备库断开后丢失日志)
hot_standby = on # 允许从库进入只读模式(后续逻辑复制可能需要)
listen_addresses = '*' # 监听所有IP地址(允许从库远程连接)
pg_hba.conf(路径:/etc/postgresql/<版本>/main/pg_hba.conf),添加从库连接权限:host replication replicator 192.168.1.11/32 md5 # 允许从库IP通过复制用户连接
sudo systemctl restart postgresql
psql工具创建复制专用角色(需具备REPLICATION权限):sudo -u postgres psql
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'your_strong_password'; # 替换为强密码
\q
/var/lib/postgresql/<版本>/main/):sudo systemctl stop postgresql
sudo rm -rf /var/lib/postgresql/<版本>/main/*
pg_basebackup拉取主库数据-R参数会自动生成standby.signal和postgresql.auto.conf,简化配置):sudo -u postgres pg_basebackup -h 192.168.1.10 -D /var/lib/postgresql/<版本>/main -U replicator -P --wal-method=stream
输入步骤2.2中设置的复制用户密码,等待拉取完成。sudo systemctl start postgresql
psql,执行以下命令查看从库连接信息:SELECT application_name, client_addr, state, sync_state
FROM pg_stat_replication;
state = streaming:表示从库正在实时同步主库WAL日志。sync_state = sync/async:表示同步模式(同步/异步)。CREATE TABLE test_replication (id SERIAL PRIMARY KEY, name VARCHAR(100));
INSERT INTO test_replication (name) VALUES ('Test Data');
SELECT * FROM test_replication;
若查询到数据,则复制成功。若需按表同步数据(而非全库),可使用逻辑复制:
postgresql.conf,启用逻辑复制:wal_level = logical # 逻辑复制需要更高WAL级别
max_replication_slots = 5 # 允许的最大复制槽数量
sudo systemctl restart postgresql
ALL TABLES表示所有表):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_strong_password'
PUBLICATION pub_all;
注意:从库需提前创建表结构(与主库一致),逻辑复制仅同步数据变更。192.168.1.10)和从库(192.168.1.11)的连接。replicator)。archive_mode = on),防止备库长时间断开导致数据丢失。synchronous_standby_names = '*')可保证强一致性,但会增加延迟,需根据业务需求选择。