Postgresql启动无监听端口问题的解决

问题

在初始化msfdb时,报错postgresql无法连接。具体错误如下:

msf > msfdb init

\* exec: msfdb init

i Database already started

psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory

Is the server running locally and accepting connections on that socket?

尝试

根据报错信息,做了如下尝试:

  1. 查看/var/run/postgresql/目录中有没有.s.PGSQL.5432文件,确实没有,查看权限是postgres的读写执行都有,排除权限问题。
  2. 查看配置文件/etc/postgresql/18/main/postgresql.conf,listen_address取消注释,也是不行,排除配置文件问题,因为默认这个配置文件从未改过。
  3. 使用sudo -u postgres service postgresql restart由postgres服务账号重启服务,也是不行,排除服务账号的问题。
  4. 查看配置文件中socket的路径确实是/var/run/postgresql/,排除socket默认路径问题。

根本原因

不断地尝试service stop,start,都是显示服务activate已启动,但ss -tuln查看仍然没有5432的监听端口。ps aux | grep postgres 也没发现进程。说明问题出在这里。

存在一个集群环境,且状态为down,没有启动。由于没有存活的集群,自然就不会有 postgres 进程监听 5432 端口,也就不会有 Unix socket 文件。

而service postgresql start 的职责是"按配置尝试启动所有已创建的数据库集群",即使某个集群启动失败,服务状态也可能显示为 active (exited),因为启动脚本本身执行完成了。相当于PostgreSQL 的"服务壳"启动成功,但数据库实例(集群)并未真正运行。

一句话总结:PostgreSQL 的总控服务显示启动成功,但底层的数据库实例没有运行,导致端口和 socket 缺失,因而 msfdb 无法连接。

解决

手动使用 pg_ctlcluster 启动集群后,PostgreSQL 真正开始工作,问题解决。

查看集群,正常。

查看进程和监听端口,正常。

查看socket文件,已创建。

查看具体的数据库实例,运行中。

让我们不断学习,保持好奇和兴趣!

Iain

相关推荐
cpolar技术支持30 分钟前
本地数据库客户端只能自己用?用 cpolar 安全访问 NAS 上的 PostgreSQL 管理台
postgresql·内网穿透·cpolar·nas·pgadmin
l1t13 小时前
DeepSeek总结的pg_clickhouse 与 chdb 更新:编码、嵌套与类型
数据库·clickhouse·postgresql
余槐i2 天前
EXPLAIN 显示走了索引查询仍慢:回表与选择性在 500 万行表上拉开 10 倍耗时
数据库·postgresql·性能优化·vacuum·explain
梦在远山后2 天前
PostgreSQL 锁与死锁:结合 DevMind 讲清楚
python·postgresql·agent
浪潮IT馆3 天前
Windows 10 安装 PostgreSQL 9.6.24 完整教程
数据库·windows·postgresql
岳麓丹枫0013 天前
PG 孤儿物理复制槽残留导致 pg_wal 膨胀 19G 故障分析
postgresql
haerapi3 天前
把 PostgreSQL 复制巡检做成可审计闭环:确定性采集、阈值判定与受控模型归纳
数据库·postgresql
如果'\'真能转义说3 天前
Docker Desktop | 本地化挂载 Postgresql
docker·postgresql·容器
IvorySQL4 天前
PostgreSQL 日报 |RLS 机密性绕过漏洞(9 月 27 日)
数据库·postgresql