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

时间:2016-05-17 12:58:23

标签: postgresql greenplum hawq

我正把头靠在墙上。它已经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文件。

我们删除了它。但仍然存在错误。

3 个答案:

答案 0 :(得分:2)

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

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

打开 postgresql.conf 文件并查看 listen_addresses port unix_socket_directory , unix_socket_group unix_socket_permissions 设置可能是问题的根源。

由于引用的错误消息特别提到了套接字文件,因此请仔细查看 unix_socket_directory unix_socket_group unix_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帮助。

答案 1 :(得分:0)

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

ps ax | grep 'M master'

如果主设备正在运行,它还将显示主设备正在侦听的端口。

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

答案 2 :(得分:0)

该错误通常意味着数据库已停止。你永远不应该删除这个文件,除非它在一个糟糕的崩溃之后被遗忘,而这个文件从未被清除过。您通常会在再次启动数据库时检测到这种情况 - 它会抱怨已存在的文件。

我倾向于寻找

ps -eaf | grep -i silent

查看postmaster流程。

如果主服务器已关闭,但段已启动,则只需启动主服务器

gpstart -m

然后用

停止一切

gpstop -M fast

失败的原因应该在$ MASTER_DATA_DIRECTORY / pg_log中,并且可能在相应的段pg_log目录中。如果主人或部门有恐慌,也可能有核心文件。