Greenplum数据库:psql:无法连接到服务器:没有这样的文件或目录

Posted

技术标签:

【中文标题】Greenplum数据库:psql:无法连接到服务器:没有这样的文件或目录【英文标题】:Greenplum Database :psql: could not connect to server: No such file or directory 【发布时间】:2016-05-17 12:58:22 【问题描述】:

我正用头撞墙。已经 4 天了。但是 psql 没有连接。

我们有一个 Greenplum 数据库的小数组。其中,我们有主节点。当我尝试使用 psql 实用程序时

收到此错误:

[gpadmin@master gpseg-1]$ psql
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

我们尝试过

关于搜索 postmaster.pid 文件。

我们已将其删除。但仍然存在错误。

【问题讨论】:

您是否安装了多个版本的 PostgreSQL?看起来它可能在错误的目录中查找 UNIX 套接字。我相信较新的版本存储在 /var/run/postgresql 中。 我们需要有关您使用的系统的更多信息。你的守护进程在运行吗?尝试 $ sudo service postgresql.service start 或 $ sudo systemctl start postgresql.service PostgreSQL 8.2.15 (Greenplum Database 4.2.0 build 1) (HAWQ 1.3.0.2 build 14421) on x86_64-unknown-linux-gnu, 由 GCC 编译 gcc (GCC) 4.4.2 编译2015 年 5 月 18 日是 select version() 命令 17:03:43 (1 row) 的输出 它是greenplum数据库,我们只有一个postgres实例 我们正在尝试使用 gpadmin 用户的主节点 psql 实用程序。它抛出错误。 【参考方案1】:

使用( netstat -ln; ps -ef ) | egrep '(postgres)|(postmaster)|(5432)' 之类的命令来尝试确定 postgres 服务器的实例是否正在运行。

如果 postmaster 没有运行,请删除 postmaster.pid 文件并重新启动数据库。虽然我不使用 Greenplum 数据库,但我看到这里有说明:Starting and Stopping the Greenplum Database. 在确保数据库没有运行之前不要删除 postmaster.pid 文件,并注意删除 postmaster.pid 文件em>postmaster.pid 文件不启动数据库是没有意义的。

打开 postgresql.conf 文件并查看 listen_addressesportunix_socket_directoryunix_socket_groupunix_socket_permissions 设置可能是问题的根源。

由于引用的错误消息特别提到了套接字文件,因此请仔细查看 unix_socket_directoryunix_socket_groupunix_socket_permissions

如果 unix_socket_directory 指向的不是 /tmp,那么存在各种变通方法。

或者,假设服务器正在运行,可能会尝试在不查看 postgresql.conf 文件的情况下定位套接字文件,尽管这可能会使处理权限、端口等问题。 locatefind 等工具可以与sudo 结合使用或由root 用户使用。

$ sudo find /tmp /var -name .s.PGSQL.5432

假设 .s.PGSQL.5432 文件问题的位置是问题的根本原因,在psql 命令行上指定套接字文件位置可能是最直接的解决方法。例如,如果 *.s.PGSQL.5432 文件像在某些系统上一样位于 /var/pgsql_socket 目录中,请尝试此操作,但当然,请使用 所在的实际目录.s.PGSQL.5432 位于:

$ pgsql -h /var/pgsql_socket

如果 .s.PGSQL.5432 文件在 /tmp 中,则问题更可能是权限之一,并咨询 postgresql.conf 文件被建议,并且尝试psql 命令的用户可能必须被添加到有权访问套接字文件的组中。 (请记住,更改组成员后注销并重新登录。)

虽然该页面似乎不一定与此问题直接相关,但请根据需要考虑 Accessing the Database 帮助。

【讨论】:

当我调试问题时,我已将权限 777 授予 "/tmp/.s.PGSQL.5432" 。现在我的错误转换为 psql: could not connect to server: Connection refused 服务器是否在本地运行并接受 Unix 域套接字“/tmp/.s.PGSQL.5432”上的连接? 我们又观察到了一件事。即在每次重新启动时 /tmp/.s.PGSQL.5432 文件消失。所以再次出现错误说 [gpadmin@master gpseg-1]$ psql psql: could not connect to server: No such file or directory 服务器是否在本地运行并接受 Unix 域套接字“/tmp/.s.PGSQL.5432”上的连接? 一般来说,Postgres 是权限偏执狂。如果对某些文件的权限设置过于宽松,它将拒绝允许连接。虽然我没有在套接字文件中明确看到这一点,但这可能是原因。您必须检查 postgresql.conf 文件并将其设置与授予尝试使用 psql 命令的用户的权限相关联。是的,socket 文件会在每次启动后消失并恢复到旧的权限;尝试使用 psql 命令的用户必须具有与 postgresql.conf 文件中指定的设置兼容的权限。 /var/log/postgres/postgresql 是否包含有关“psql:无法连接到服务器:连接被拒绝服务器在本地运行并接受 Unix 域套接字上的连接”的任何有趣/相关信息/ tmp/.s.PGSQL.5432" 错误? 我们通过重启网段的机器解决了这个问题。然后我运行 gpstate 实用程序,它显示了所有内容。谢谢【参考方案2】:

gpstate 显示什么?如果无法连接,请确保 GPDB master 正在运行:

ps ax | grep 'M master'

如果主服务器正在运行,它还会显示主服务器正在侦听的端口。

对于 gpadmin Linux 帐户,请查看 ~/gpAdminLogs 目录。应该有一个或多个启动日志可供您查看。

【讨论】:

【参考方案3】:

该错误通常意味着数据库已停止。你永远不应该删除这个文件,除非它在一次严重的崩溃之后被留下,这个文件从来没有被清除过。当您再次启动数据库时,您通常会检测到这种情况 - 它会抱怨文件已经存在。

我倾向于寻找

ps -eaf|grep -i 无声

查看 postmaster 进程。

如果主节点关闭,但段启动,则只需启动主节点

gpstart -m

然后用

停止一切

gpstop -M 快

失败的原因应该在 $MASTER_DATA_DIRECTORY/pg_log 并且可能在相应的段 pg_log 目录中。如果 master 或 segment 出现 panic,也可能有 core 文件。

【讨论】:

我已经恢复了与之前删除它相同的 postmaster.pid。但是在备份的帮助下,我恢复了 master 中的 postmaster 文件。 在主服务器上,“ps -eaf | grep postgres”返回什么。如果没有,则停止主数据库。在再次启动数据库之前,您需要在所有分段服务器上检查相同的内容。如果主数据库仍在运行,但无法连接,可以尝试使用“pg_ctl stop -D $MASTER_DATA_DIRECTORY -p 5432”停止它

以上是关于Greenplum数据库:psql:无法连接到服务器:没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章

无法连接到我的 AWS 数据库实例 | psql:无法连接到服务器:操作超时

psql:无法连接到服务器:MAC OSX 上没有这样的文件或目录

我将我的 RDS (psql) 数据库设置为不可公开访问,现在我无法使用 pgAdmin 连接到我的数据库。我现在如何连接到它?

无法在 psql GreenPlum 中分发

我们的 GCP docker 实例已启动并正在运行,但是我们无法连接到 GreenPlum

R:连接到 Greenplum 数据库