已放行0.0.0.0/0,PostgreSQL数据库昨日可连今日无法连接求助
PostgreSQL连接失败排查方案
确认PostgreSQL服务状态
在Cloud Shell中执行systemctl status postgresql(适用于systemd系统)或pg_ctl status,检查服务是否正常运行,有没有异常重启、崩溃记录。如果服务异常,先重启服务再测试:systemctl restart postgresql。验证PostgreSQL监听配置
检查postgresql.conf中的监听地址设置,确保允许所有IP访问:cat /var/lib/postgresql/<你的PostgreSQL版本>/main/postgresql.conf | grep listen_addresses输出应为
listen_addresses = '*',如果不是,修改该配置后重启PostgreSQL服务(注意替换命令中的版本号,比如14、15)。排查云安全组/本地防火墙规则
- 登录云控制台查看数据库实例的安全组入站规则,确认5432端口(PostgreSQL默认端口)的规则是否仍为
0.0.0.0/0允许访问,有没有新增拒绝规则或规则被覆盖。 - 在Cloud Shell中检查服务器本地防火墙状态:
- 对于ufw:执行
ufw status,确认5432端口允许外部访问; - 对于iptables:执行
iptables -L -n | grep 5432,确认没有拦截外部连接的规则。
如果发现本地防火墙拦截,执行ufw allow 5432或对应iptables命令开放端口,再重启防火墙服务。
- 对于ufw:执行
- 登录云控制台查看数据库实例的安全组入站规则,确认5432端口(PostgreSQL默认端口)的规则是否仍为
检查PostgreSQL访问控制规则(pg_hba.conf)
查看pg_hba.conf文件,确认存在允许所有外部IP连接的规则:cat /var/lib/postgresql/<你的PostgreSQL版本>/main/pg_hba.conf需包含类似以下的规则:
host all all 0.0.0.0/0 md5如果缺少该规则,添加后重启PostgreSQL服务。
分析连接失败日志定位根因
查看PostgreSQL日志文件(默认路径/var/log/postgresql/postgresql-<版本>-main.log),聚焦昨晚9点左右的日志内容:- 若日志显示
connection refused:优先排查监听配置、防火墙/安全组问题; - 若日志显示
password authentication failed:检查客户端连接时的用户名/密码是否正确,或pg_hba.conf的认证规则是否匹配; - 若日志显示
no pg_hba.conf entry:说明pg_hba.conf未允许对应IP的连接规则。
- 若日志显示
确认服务器公网IP是否变更
在Cloud Shell中执行curl ifconfig.me获取当前公网IP,对比本地客户端连接时使用的IP地址,确认是否因IP变更导致连接失败。
内容的提问来源于stack exchange,提问作者MRiabov
相关产品推荐
相关产品推荐

