以下是在Debian上实现PostgreSQL复制功能的指南,支持流复制和逻辑复制两种主流方式:
sudo apt update && sudo apt install postgresql postgresql-contribpostgresql.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 md5CREATE ROLE replicator WITH REPLICATION PASSWORD '密码' LOGIN;
sudo systemctl restart postgresqlsudo systemctl stop postgresqlpg_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和日志文件,确保复制正常。参考来源: