2013-03-17 59 views
1

我知道很多人问这个问题,但我尝试了很多路径解决方案,但任何一个都是正确的。在centOS中用postgresql拒绝连接

因此,我从远程客户端(局域网内)连接到我的postgresql服务器(在CentOS 6.4最低版本 - 我只有postgresql服务器,FTP和SSH服务)有问题。我有ssh连接,所以我认为这个问题可以通过许可tcp/ip来实现。 的Java抛出异常:

org.postgresql.util.PSQLException: Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections. 
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:207) 
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:64) 
    at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:136) 
    at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:29) 
    at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:21) 
    at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:31) 
    at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24) 
    at org.postgresql.Driver.makeConnection(Driver.java:393) 
    at org.postgresql.Driver.connect(Driver.java:267) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at Main.main(Main.java:19) 
Caused by: java.net.ConnectException: Connection timed out: connect 
    at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
    at java.net.PlainSocketImpl.connect(Unknown Source) 
    at java.net.SocksSocketImpl.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at org.postgresql.core.PGStream.<init>(PGStream.java:60) 
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:101) 
    ... 11 more 

使用ifconfig:

eth0  Link encap:Ethernet HWaddr 08:00:27:F0:3A:F4 
     inet addr:192.168.1.18 Bcast:192.168.1.255 Mask:255.255.255.0 
     inet6 addr: fe80::a00:27ff:fef0:3af4/64 Scope:Link 
     UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
     RX packets:2677 errors:0 dropped:0 overruns:0 frame:0 
     TX packets:1437 errors:0 dropped:0 overruns:0 carrier:0 
     collisions:0 txqueuelen:1000 
     RX bytes:251266 (245.3 KiB) TX bytes:214910 (209.8 KiB) 

/var/lib/pgsql/9.2/data/pg_hba.conf - 只有文件的主要部分

# "local" is for Unix domain socket connections only 
local all    all          peer 
# IPv4 local connections: 
host all    all    127.0.0.1/32   ident 
host all    all    192.168.1.18 255.255.255.0  password 
#hostssl all   all    192.168.1.18 255.255.255.0  trust 
#hostnossl  all  all    192.168.1.18 255.255.255.0  trust 
# IPv6 local connections: 
host all    all    ::1/128     ident 
# Allow replication connections from localhost, by a user with the 
# replication privilege. 
#local replication  postgres        peer 
#host replication  postgres  127.0.0.1/32   ident 
#host replication  postgres  ::1/128     ident 

host all all 192.168.1.18 255.255.255.255 password 
host all all ::1 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff password 

VAR/lib/pgsql/9.2/data/poistgresql.conf - 仅主要部分

# - Connection Settings - 

listen_addresses = '*' 
#'localhost,192.168.1.18' 
             # what IP address(es) to listen on; 
             # comma-separated list of addresses; 
             # defaults to 'localhost'; use '*' for all 
             # (change requires restart) 
#port = 5432       # (change requires restart) 
max_connections = 100     # (change requires restart) 
# Note: Increasing max_connections costs ~400 bytes of shared memory per 
# connection slot, plus lock space (see max_locks_per_transaction). 
#superuser_reserved_connections = 3  # (change requires restart) 
#unix_socket_directory = ''    # (change requires restart) 
#unix_socket_group = ''     # (change requires restart) 
#unix_socket_permissions = 0777   # begin with 0 to use octal notation 
             # (change requires restart) 
#bonjour = off       # advertise server via Bonjour 
             # (change requires restart) 

和最后的调试信息是netstat的评论-TA

Active Internet connections (servers and established) 
Proto Recv-Q Send-Q Local Address    Foreign Address    State 
tcp  0  0 *:ssh      *:*       LISTEN 
tcp  0  0 *:postgres     *:*       LISTEN 
tcp  0  0 localhost:smtp    *:*       LISTEN 
tcp  0  52 PC2.home:ssh    Michal-laptop.home:26146 ESTABLISHED 
tcp  0  0 PC2.home:ssh    Michal-laptop.home:25917 ESTABLISHED 
tcp  0  0 *:ssh      *:*       LISTEN 
tcp  0  0 *:postgres     *:*       LISTEN 
tcp  0  0 localhost:smtp    *:*       LISTEN 

你能帮助我?我应该怎么做才能连接? 谢谢你的时间。

+0

从你的客户端机器上,你可以做'telnet 192.168.1.16 5432'吗?如果它表示连接失败或连接超时,则服务器上的防火墙可能不允许该端口。 – beny23 2013-03-17 13:05:49

+0

我尝试和你是对的:telnet:连接到地址192.168.1.18:连接超时 – 2013-03-17 13:20:49

回答

-1

在无功/ lib中/的pgsql/9.2 /数据/ poistgresql.conf

取消下面一行:

#port = 5432 

可以更改监听端口,如果你想要的。重新启动服务。

+0

但5432是默认值,所以我认为它不能取消注销,因为我不改变它。 - 它没有帮助 – 2013-03-17 13:06:57

+0

只是有一个尝试,如果没有工作,你可以后备:)。根据我的工作;) – Sach 2013-03-17 13:08:51

+0

是的,我感谢你的兴趣,我尝试改变它,但它并没有帮助 – 2013-03-17 13:10:26

1

由于您无法telnet到您的服务器端口5432,您将不得不打开防火墙中的端口5432。

通过控制台认为它是类似于System -> Administration -> Firewall/usr/bin/system-config-firewall

+0

你说得对。我解决了命令服务iptables stop的问题,但是你知道我应该添加到iptables文件中吗,它不会阻止Fireware吗?我尝试添加行-A INPUT -p tcp --dport 5432 -j ACCEPT但它没有帮助? – 2013-03-17 22:48:48

+0

我想这将是最好的一个单独的问题,以免浑水。 – beny23 2013-03-18 10:40:04