" psql:无法连接到服务器:连接被拒绝"连接到远程数据库时出错

时间:2015-09-07 12:48:20

标签: postgresql ubuntu psql centos7

我正在尝试使用以下命令连接到远程服务器中安装的postgres数据库:

psql -h host_ip -U db_username -d db_name

发生错误:

  

psql:无法连接到服务器:连接被拒绝       服务器是否在主机上运行""并接受       端口5432上的TCP / IP连接?

  1. Postgres安装版本为9.4。
  2. 主机操作系统:Ubuntu 15.04
  3. 客户端操作系统:Centos 7
  4. 我已经尝试了以下但问题仍未解决:

    1. 已修改pg_hba.conf个文件以包含
    2.   

      主持全部0.0.0.0/0 md5

      1. 编辑' postgresql.conf'并将listen参数更改为
      2.   

        的listen_addresses =' *'

        1. 重新启动postgres服务。
        2. 在主机和客户端上禁用防火墙和iptables。
        3. 我通过在本地运行psql命令来检查它是否有效。
        4. 我尝试了question中给出的第二个解决方案。正在运行nmap给了我以下输出:
        5. Starting Nmap 6.47 ( http://nmap.org ) at 2015-09-07 18:08 IST Nmap scan report for 10.17.250.250 Host is up (0.0000040s latency). Not shown: 997 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 80/tcp open http

          我错过了什么。希望有人可以提供帮助。

15 个答案:

答案 0 :(得分:71)

cd /etc/postgresql/9.x/main/

打开名为postgresql.conf

的文件
sudo vi postgresql.conf

将此行添加到该文件

listen_addresses = '*'

然后打开名为pg_hba.conf

的文件
sudo vi pg_hba.conf

并将此行添加到该文件

host  all  all 0.0.0.0/0 md5

它允许使用加密密码访问所有用户的所有数据库

重新启动服务器

sudo /etc/init.d/postgresql restart

答案 1 :(得分:12)

检查postgresql.conf中定义的端口。我安装的postgres 9.4使用端口5433而不是5432

答案 2 :(得分:4)

在尝试远程连接到我的Raspberry Pi上的新PostgreSQL安装时,我一直在努力解决这个问题。以下是我为解决此问题所做的全部细分:

首先,打开PostgreSQL配置文件,确保该服务将在localhost之外侦听。

sudo [editor] /etc/postgresql/[version]/main/postgresql.conf

我使用了nano,但你可以使用你选择的编辑器,当我安装了版本9.1时,该目录将适用于你安装的任何版本。

向下搜索标题为“连接和身份验证”的部分。第一个设置应为'listen_addresses',可能如下所示:

#listen_addresses = 'localhost'     # what IP address(es) to listen on;

右侧的评论提供了有关如何更改此字段的良好说明,并且使用建议的'*'可以很好地运行。

请注意,此字段已注明#。根据评论,它将默认为“localhost”,因此仅将值更改为'*'是不够的,您还需要通过删除前导#取消注释该设置。

现在应该是这样的:

listen_addresses = '*'         # what IP address(es) to listen on;

您还可以检查下一个设置“端口”,以确保正确连接。 5432是默认值,如果您没有指定,则是psql尝试连接的端口。

保存并关闭文件,然后打开Client Authentication配置文件,该文件位于同一目录中:

sudo [editor] /etc/postgresql/[version]/main/pg_hba.conf

如果您想限制访问,我建议您阅读该文件,但对于基本的开放式连接,您将跳转到文件的底部并添加如下所示的行:

host all all all md5

如果您愿意,可以按Tab键而不是空格以将字段与现有列对齐。

就个人而言,我添加了一行如下所示:

host [database_name] pi 192.168.1.0/24 md5

这限制了与一个用户和局域网子网上的一个数据库的连接。

保存对文件的更改后,您需要重新启动服务才能实施更改。

sudo service postgresql restart

现在,您可以检查以确保该服务正在使用以下命令公开侦听正确的端口:

sudo netstat -ltpn

如果不以高架形式运行它(使用sudo),它不会告诉您在这些端口上侦听的进程的名称。

其中一个进程应该是Postgres,本地地址应该是开放的(0.0.0.0)并且不限于仅本地流量(127.0.0.1)。如果它未打开,那么您需要仔细检查配置文件并重新启动服务。您可以再次确认该服务正在侦听正确的端口(默认为5432,但您的配置可能不同)。

最后,您将能够使用以下命令从远程计算机成功连接:

psql -h [server ip address] -p [port number, optional if 5432] -U [postgres user name] [database name]

答案 3 :(得分:3)

确保在配置文件中正确应用了设置。

vim /etc/postgresql/x.x/main/postgresql.conf

请尝试以下操作查看日志并找到问题。

tail /var/log/postgresql/postgresql-x.x-main.log

答案 4 :(得分:1)

以下配置,您需要设置:

要打开端口5432,请编辑/etc/postgresql/9.1/main/postgresql.conf并更改

# Connection Settings -

listen_addresses = '*'          # what IP address(es) to listen on;

在/etc/postgresql/10/main/pg_hba.conf

# IPv4 local connections:
host    all             all             0.0.0.0/0           md5

现在重新启动DBMS

sudo service postgresql restart

现在您可以连接

psql -h hostname(IP) -p port -U username -d database

答案 5 :(得分:1)

另一种情况,postgresql.confpg_hba.conf文件不在 /etc/postgresql/9.1/main/。因为 postgres 可以在您设置的任何位置启动。

例如,当您使用命令 pg_ctl -D /tmp/pgsql/ start 时,postgresql.confpg_hba.conf 将位于 /tmp/pgsql/

答案 6 :(得分:0)

我认为您使用的是机器名而不是主机的IP。

当我尝试使用机器名称时出现了同样的错误。因为,仅当客户端和主机位于同一网络且安装了相同的操作系统时才允许。

答案 7 :(得分:0)

就我而言,我没有更改管理门户中的azure默认安全策略。原来是允许端口22,其余都被拒绝。只要我添加5432端口,一切都会变好。

答案 8 :(得分:0)

以下内容在macos Mojave上为我提供了帮助:

var http = require("http");
http.createServer(function (request,response) {
response.writeHead(200,"Content-Type":"text/plain");
response.write("Hello World");
response.end();
}).listen(8888);

答案 9 :(得分:0)

我遇到了完全相同的问题,但配置文件正确。就我而言,问题出自我使用的Eduroam wifi:当我通过另一个wifi连接时,一切正常。看来Eduroam至少在我的大学里封锁了5432端口。

答案 10 :(得分:0)

如果您使用的是Mac,那么我的操作非常简单:

list

这将告诉您是否已经安装了该版本,如果没有,请运行什么版本或为您安装最新版本

brew install postgres

这将确保您先安装了最新版本

brew upgrade postgresql

这将再次启动服务。我希望这对某人有帮助。

答案 11 :(得分:0)

查看端口并在postgresql.conf中进行端口更改。我的postgres 9.4安装使用端口5431或5434而不是5432。 如果显示端口正在使用中,请更改端口。 并检查是否在psql安装中提供了密码,因此请在文件中提供密码并保存。

答案 12 :(得分:0)

就我而言,我删除了一个语言环境并生成了另一个语言环境。由于postgresql.conf文件中“ lc_messages”,“ lc_monetary”,“ lc_numberic”和“ lc_time”上的致命错误,数据库无法打开。

恢复语言环境会为我解决问题。

答案 13 :(得分:0)

尝试迁移数据库。例如,如果您正在使用Heroku和Django托管项目,请尝试使用heroku run python manage.py migrate命令;错误应该消失。

答案 14 :(得分:0)

我遇到了这样的问题,我必须通过 ssh 连接到服务器,然后在 psql 控制台中运行查询,因此查询在脚本中,但是每次我遇到此错误时都找不到 psql,所以我所做的只是添加了 psql我们从 cat .bash_profile 获得的 bin 中的完整路径及其完成

PATH=$PATH:/usr/local/pgsql/bin:/usr/local/mysql/bin

所以我添加了整个 /usr/local/mysql/bin/psql 而不是 psql 用于远程执行。

相关问题