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

相关推荐
pxzsky7 小时前
PG17数据库安装中分分词插件:pg_jieba
数据库·postgresql·pg_jieba
jun_bai13 小时前
postgresql数据库免安装版安装到windows系统
数据库·postgresql
BullSmall13 小时前
CentOS7 阿里云 PG 镜像 PG10.9 → PG17 完整升级指南
阿里云·postgresql·centos
瀚高PG实验室13 小时前
DELETE 条件字段缺少索引导致 SuperSync 同步严重延迟
数据库·postgresql·瀚高数据库
IvorySQL18 小时前
PG 日报|修复高 IO 并发场景,解决预读机制耗尽本地缓冲区缺陷
数据库·人工智能·sql·postgresql·区块链
想你依然心痛20 小时前
电力能耗系统怎么搭,Django 加 PostgreSQL 入门指南
postgresql·django·电力能耗系统,后端开发
凌虚2 天前
基于 PostgreSQL WAL 构建 CDC 系统:原理与工程实现
数据库·后端·postgresql
BullSmall2 天前
PostgreSQL 14 pg_dumpall 完整备份指南
数据库·postgresql·oracle
jnrjian5 天前
\dx Postgres 查看EXTENSION
postgresql
Lihua奏5 天前
高可用与扩展:一台 PostgreSQL 不够用之后怎么办?
postgresql