Ubuntu 上使用 pgAdmin 配置 PostgreSQL 主从复制
一 架构与准备
二 主库配置(使用 pgAdmin 执行 SQL 与修改配置文件)
CREATE ROLE replicator WITH REPLICATION LOGIN ENCRYPTED PASSWORD 'StrongPass123';
listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
wal_keep_size = 128MB # 老版本可用 wal_keep_segments
archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/14/main/archive/%f'
host replication replicator 192.168.22.215/32 md5
sudo systemctl restart postgresql@14-main
说明:上述参数与步骤为 Ubuntu 上搭建流复制的通用做法,pgAdmin 主要用于执行 SQL 与编辑配置文件,服务重启需在操作系统层面完成。
三 从库初始化与配置(使用 pgAdmin 与系统终端配合)
sudo systemctl stop postgresql@14-main
sudo rm -rf /var/lib/postgresql/14/main/*
sudo mkdir -p /var/lib/postgresql/14/main
sudo chown postgres:postgres /var/lib/postgresql/14/main
export PGPASSWORD='StrongPass123'
sudo -E -u postgres pg_basebackup \
-h 192.168.22.131 -U replicator -D /var/lib/postgresql/14/main \
-P -w -v --wal-method=stream
sudo -u postgres touch /var/lib/postgresql/14/main/standby.signal
primary_conninfo = 'host=192.168.22.131 port=5432 user=replicator password=StrongPass123'
hot_standby = on
hot_standby_feedback = on
sudo systemctl start postgresql@14-main
说明:pg_basebackup 会创建备库数据目录并自动写入 primary_conninfo 到 postgresql.auto.conf;standby.signal 用于标识该实例为备库。
四 验证与监控
SELECT client_addr, state, sync_state
FROM pg_stat_replication;
正常应看到从库 client_addr、状态 streaming,以及 sync_state 为 async(异步)或 sync(同步)。SELECT slot_name, plugin, slot_type, active FROM pg_replication_slots;
SHOW transaction_read_only; -- 应为 on
提示:若出现复制中断,检查主库 pg_hba.conf 授权、网络连通性、磁盘空间与 WAL 保留策略(如 wal_keep_size 或复制槽)。
五 可选 同步复制与切换
synchronous_standby_names = 'pgstandby1'
sudo -u postgres psql -c "SELECT pg_create_physical_replication_slot('pgstandby1');"
在备库 postgresql.auto.conf 中应看到由 pg_basebackup -R -C -S pgstandby1 自动写入的:primary_slot_name = 'pgstandby1'
application_name = 'pgstandby1'
再次在主库查询 pg_stat_replication,应见到 sync_state = sync。sudo -u postgres pg_ctl promote -D /var/lib/postgresql/14/main