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