我不是通信网络方面的行家,所以我不知道我的 "主机名 "应该是什么,在哪里可以找到?
我在ubuntu 14.04上创建了一个postgreSQL服务器,我可以通过设置hostname为127.0.0.1(localhost),甚至192.168.1.42(我的私人IP)从同一台电脑连接到它,没有问题。但我不能从其他电脑连接到我的服务器,即使他们是在本地网络或没有。我总是得到这样的消息。
"Connection to <hostname>:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections."
其中127.0.1.1, 127.0.0.1, 192.168.1.42, 98.765.432.123(公共IP)或其他任何东西,它从来没有工作。正确的主机名是什么?
我已经把listen_addresses设置为'*',已经编辑pg_hba.conf接受0.0.0.00 IP-s,并且禁用ubuntu防火墙。
这可能是由许多事情引起的。
<hostname>
,除非你有一些本地的DNS解决方案。要排除后者的问题,请使用Ubuntu服务器的IP地址。在Ubuntu上输入 ifconfig
看,可能是 192.168.1.42
就像你提到的那样。所以从客户端用Java应用,你使用服务器的IP地址。postgresql.conf
. 在JDBC连接字符串中,你还应该注明端口。"jdbc:postgresql:/192.168.1.42:5432...",为了安全起见。postgres
在您的情况下)可以连接到它。再往下看。在 pg_hba.conf
你需要为你的新数据库创建一个条目,以便它可以被连接到(典型的设置,检查你的网络设置)。你在这里指定的IP地址(范围)是连接到数据库的客户端的IP地址!
host my_db all 192.168.0.0/16 md5
你必须在修改后重新启动你的PostgreSQL服务器。pg_hba.conf
. (通常在Ubuntu上,做 sudo ./etc/init.d/postgresql restart
)
创建数据库 my_db
(或任何你喜欢的名字),进入你的Ubuntu盒子并输入 psql
作为 postgres
用户。
vekszor@ubuntu:~$ sudo -u postgres psql
[sudo] password for user:
psql (9.3.5)
Type "help" for help
postgres=#
为了连接到数据库,你应该有一个数据库。
postgres=# CREATE DATABASE my_db;
CREATE DATABASE
你还需要一个用户(角色),这个用户的权力要小于这个用户。postgres
超级用户,但仍然能够操作数据库。所以创建这个用户角色,并分配数据库的所有权。
postgres=# CREATE ROLE vekszor LOGIN PASSWORD 'secret123' CREATEROLE;
CREATE ROLE
postgres=# ALTER DATABASE my_db OWNER TO vekszor;
ALTER
现在你可以用Java应用回到你的客户端电脑上,用数据库的名称、用户和密码完成JDBC连接字符串。
需要注意的是,如果你想从互联网上访问你的数据库,你应该在你的路由器中设置一个NAT规则,将5432端口的流量指向Ubuntu服务器的IP.只要路由器的内部地址与你在路由器中指定的客户端计算机的地址范围相同即可。pg_hba.conf
这应该很容易设置,否则就会在 pg_hba.conf
.
看了你的评论才知道正确答案。 这就是你在iptables中添加规则的方法。
iptables -A INPUT -s 0/0 -p tcp --dport 5432 -j ACCEPT
00 如果你想让任何人都能访问它的话 你可以把它改成一个特定的ip地址或ip地址的范围。
如果你使用UI连接到服务器,你可以运行下面的查询来获取服务器的IP地址,使用下面的查询来验证你使用的IP是否正确。
Select inet_server_addr();