我正把头靠在墙上。它已经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文件。
我们删除了它。但仍然存在错误。
答案 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 文件,但这可能会使得更难以解决权限,端口等问题。像locate
,find
等工具可以与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目录中。如果主人或部门有恐慌,也可能有核心文件。