因此,我安装了 Fedora 15 的最小安装,为 Web 应用程序创建服务器。我还从 pgrpms.org 安装了 PostgreSQL 9.1。PostgreSQL 安装顺利。在本地,我能够 initdb、start 和 psql 来更改 postgres 密码。
现在,我已经在同一子网中的 Windows 系统上安装了 pgAdmin。但是,我无法连接。
我已编辑/var/lib/pgsql/9.1/data/postgresql.conf
为设置listen_addresses = '*'
。我已编辑/var/lib/pgsql/9.1/data/pg_hba.conf
为允许host all all 192.168.1.0/24 trust
。更改后我还重新启动了 ( service postgresql-9.1 restart
)
pgAdmin 中的错误是:无法连接到服务器:连接超时(0x0000274C/10060)服务器是否在主机“192.168.1.110”上运行并在端口 5432 上接受 TCP/IP 连接?
答案是肯定的。我没有安装防火墙,并且禁用了基于 Windows 的工作站上的防火墙。我能够 ping 和 SSH 进入服务器。tcpdump 显示 pgAdmin 在端口 5432 上的连接尝试确实发生了:
[root@cobalion yum.repos.d]# tcpdump port 5432
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
07:28:44.014920 IP totodile.mcs.local.54067 > 192.168.1.110.postgres: Flags [S], seq 3554805012, w in 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
07:28:47.023859 IP totodile.mcs.local.54067 > 192.168.1.110.postgres: Flags [S], seq 3554805012, w in 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
07:28:53.019464 IP totodile.mcs.local.54067 > 192.168.1.110.postgres: Flags [S], seq 3554805012, w in 8192, options [mss 1460,nop,nop,sackOK], length 0
我不知道下一步该看哪里?从表面上看,似乎我应该能够连接。有什么想法吗?我可以从正在运行的 postgresql 服务器“内部”检查加载了哪些设置吗?
答案1
您的 tcpdump 几乎确认了iptables
服务器端正在丢弃数据包。 tcpdump
在数据包被防火墙触及之前对其进行检查。如果防火墙没有丢弃数据包并且 postgres 无法正常工作,则内核将 RST 连接尝试:
07:39:14.878008 IP localhost.12343 > localhost.35259: Flags [R.], seq 0, ack 1980582372, win 0, length 0
并且您会立即收到连接被拒绝而不是超时的信息。
我能想到的唯一其他情况是,如果你在服务器上设置了一个非常低的连接限制,而服务器已经满了。我从来没有尝试过看看会发生什么,不过我有一种感觉,它会拒绝连接,而不是根据我经常遇到的各种出现数据库错误的网站的行为使它们超时。你可以检查 postgresql 的日志,看看它是否提到了连接尝试。