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

相关推荐
Logintern095 小时前
PostgreSQL 的 ORDER BY 多列排序
数据库·postgresql
微软技术分享9 小时前
Ubuntu 本地部署Ollama+OpenWebUI教程
数据库·ubuntu·postgresql
大喵桑丶16 小时前
AlmaLinux 9 上基于 PostgreSQL + Nginx 部署高可用轻量级 Gitea 服务
nginx·postgresql·gitea
xuefuhe17 小时前
CLion2026本地阅读PostgreSQL源码实现跳转
postgresql
数智启示录1 天前
PostgreSQL 内存调优实战(第 12 篇):work_mem 只调大 64 倍,峰值为什么远不止 64 倍
运维·数据库·经验分享·postgresql·面试
自动化监测Learner2 天前
QGIS 把geojson数据导入 PostgreSQL/PostGIS 的完整流程
数据库·postgresql
jnrjian2 天前
Postgres 序列(sequence)的权限
数据库·postgresql
瀚高PG实验室2 天前
HAC 集群主节点状态在starting、running之间频繁切换
运维·数据库·postgresql·瀚高数据库
IvorySQL2 天前
PostgreSQL 日报| PGQ 功能发现严重缺陷(9 月 4 日)
数据库·postgresql
数智启示录2 天前
PostgreSQL 执行计划实战(第 9 篇):SQL 和索引没变,计划为什么突然慢一百倍
数据库·经验分享·sql·postgresql·面试