以下是在Ubuntu上使用PostgreSQL复制功能的步骤(以流复制为例):
一、环境准备
- 两台Ubuntu服务器(主库、从库),安装相同版本的PostgreSQL(如15.x)。
- 确保服务器间网络互通,主库IP假设为
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.confhot_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;(逻辑复制需在从库手动创建表结构,仅同步数据变更)
注意事项
- 主从库PostgreSQL版本需一致,建议使用Ubuntu官方仓库的稳定版本。
- 生产环境中建议配置
archive_mode和WAL归档,防止数据丢失。 - 同步复制需设置
synchronous_commit = on和synchronous_standby_names,但可能影响主库性能。
参考来源: