2

我正用头撞墙。已经 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 文件。

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

4

3 回答 3

2

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

如果 postmaster 未运行,请删除postmaster.pid文件并重新启动数据库。虽然我不使用 Greenplum 数据库,但我看到这里有说明: 启动和停止 Greenplum 数据库。 不要在没有确保数据库没有运行的情况下删除postmaster.pid文件,并注意在不启动数据库的情况下删除 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文件的情况下定位套接字文件,但这可能会使解决权限、端口等问题变得有点困难。像locate,find等工具可以与 root 用户一起使用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命令的用户添加到有权访问套接字文件。(请记住,更改组成员身份后注销并重新登录。)

尽管该页面似乎不一定与此问题直接相关,但请根据需要考虑访问数据库帮助。

于 2016-05-18T14:02:05.987 回答
0

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

ps ax | grep 'M master'

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

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

于 2016-05-17T13:36:16.953 回答
0

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

我倾向于寻找

ps -eaf|grep -i 无声

查看 postmaster 进程。

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

gpstart -m

然后停止一切

gpstop -M 快速

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

于 2016-05-17T14:47:09.807 回答