Windows Server 2012下Postgres 9.6从库启动异常及连接拒绝问题求助
解决PostgreSQL 9.6从库卡在"database system is starting up"且连接拒绝的问题
我之前在搭建PostgreSQL主从复制时也碰到过几乎一模一样的问题,结合你的配置和报错信息,咱们一步步来排查解决:
核心问题分析
从库日志持续显示FATAL: the database system is starting up,说明从库还没完成WAL日志恢复、进入hot_standby状态,这时候拒绝连接是预期行为,但如果一直卡在这里,就意味着复制链路或者基础数据有问题。
1. 先确认主库的复制槽(slot)状态
从库配置里用了primary_slot_name = 'slot_1',首先要确保主库上已经创建了这个槽,并且状态正常:
- 登录主库执行命令:
SELECT slot_name, active, replay_lsn, current_lsn FROM pg_replication_slots; - 如果
slot_1不存在,先在主库创建:SELECT pg_create_physical_replication_slot('slot_1'); - 如果
active字段是f,说明从库根本没连上主库,这是最常见的原因,接下来排查连接链路。
2. 排查主从的网络与权限链路
从库连不上主库会导致恢复无法推进,要检查这几点:
- 主库
pg_hba.conf配置:必须允许从库IP的复制连接,添加一行(替换成你的从库IP):
修改后重启主库服务生效。host replication postgres 从库IP/32 md5 - 主库防火墙:Windows Server 2012要允许5432端口的入站连接,否则从库连不上主库。
- 从库
primary_conninfo正确性:确认host=ip master server是主库的真实IP,端口5432没写错,postgres用户的密码在从库能正确访问主库(可以在从库用psql -h 主库IP -U postgres测试能不能连上主库)。
3. 检查从库的基础备份是否有效
如果从库的数据目录是直接复制运行中的主库目录,而不是用pg_basebackup生成的,会导致数据不一致,从库永远卡着恢复:
- 停掉从库Postgres服务,清空
D:\Postgres Data目录 - 在从库执行基础备份命令(替换主库IP):
输入postgres密码,等待备份完成后,再放入你的pg_basebackup -h 主库IP -U postgres -D "D:\Postgres Data" -P -X streamrecovery.conf配置,重新启动从库服务。
4. 调整从库postgresql.conf的连接配置
你执行psql.exe -U postgres时报连接拒绝,可能是listen_addresses的配置限制:
- 把
listen_addresses = 'ip slave adress'改成listen_addresses = '*',允许所有IP连接(测试用,后续可以改回特定IP) - 修改后重启从库服务,再尝试用
psql.exe -U postgres -h 从库IP连接,或者本地用psql.exe -U postgres -h 127.0.0.1连接(如果允许localhost的话)
5. 查看从库的详细日志找线索
只看“starting up”的提示不够,去从库数据目录下的pg_log文件夹,打开最新的日志文件,找更具体的错误信息,比如:
could not connect to primary server: Connection refused
could not receive WAL data from primary server
这些日志能直接定位是网络问题、权限问题还是WAL同步问题。
按照这个顺序排查,基本能解决卡启动和连接拒绝的问题。
内容的提问来源于stack exchange,提问作者Stack
相关产品推荐
相关产品推荐

