PostgreSQL 的主从复制(通常叫 流复制 / Streaming Replication)常见做法是基于 WAL(Write-Ahead Log) 的物理复制。下面我按最常用、最标准的“一主一从”物理流复制给你一个完整步骤说明(以 Linux + PostgreSQL 12+ 为例,其他版本类似)。
假设:
192.168.1.10192.168.1.20/var/lib/pgsql/12/datapostgrespostgresql.conflisten_addresses = '*'
wal_level = replica
max_wal_senders = 10
wal_keep_size = 1GB # PostgreSQL 13+,老版本是 wal_keep_segments
hot_standby = on
CREATE ROLE repl REPLICATION LOGIN PASSWORD 'repl_password';
pg_hba.conf允许从库连接:
host replication repl 192.168.1.20/32 md5
systemctl restart postgresql-12
systemctl stop postgresql-12
rm -rf /var/lib/pgsql/12/data/*
pg_basebackup 从主库拉取数据pg_basebackup \
-h 192.168.1.10 \
-U repl \
-D /var/lib/pgsql/12/data \
-Fp -Xs -P
参数说明:
-Xs:包含 WAL 流-P:显示进度standby.signaltouch /var/lib/pgsql/12/data/standby.signal
(PostgreSQL 12+ 使用此文件表示 standby)
postgresql.confprimary_conninfo = 'host=192.168.1.10 port=5432 user=repl password=repl_password'
hot_standby = on
systemctl start postgresql-12
SELECT * FROM pg_stat_replication;
看到从库连接即成功。
SELECT pg_is_in_recovery();
返回 t 表示从库处于恢复模式(正确)。
性能高,可能丢少量数据
主库配置:
synchronous_standby_names = 'standby1'
从库 primary_conninfo 加上:
application_name=standby1
如果你愿意,我可以:
你现在是打算生产环境还是学习测试?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。