2014-02-27 32 views
1

我有一个无业游民服务器:配置SQL连接使用JDBC - 游民

[email protected]:/home/vagrant/teste/pg-hostname-master$ ifconfig 
eth0  Link encap:Ethernet 
      inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 

eth1  Link encap:Ethernet 
      inet addr:33.33.33.33 Bcast:33.33.33.255 Mask:255.255.255.0 

lo  Link encap:Local Loopback 
      inet addr:127.0.0.1 Mask:255.0.0.0 

的端口是:

name  | port 
setting | 5432 

我的问题是,什么是使用JDBC正确的数据?

我已经尝试过:

jdbc:postgresql://localhost:5432/test 

jdbc:postgresql://33.33.33.33:5432/test 

jdbc:postgresql://127.0.0.1:5432/test 

这些作品都没有。

org.postgresql.util.PSQLException: Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections. 

更新:

tcp  0  0 0.0.0.0:5432   0.0.0.0:*    LISTEN  1020/postgres 

postgresql.conf

Listen_adresses = '*' 

流浪汉日志

C:\Users\xx>vagrant up 
Bringing machine 'default' up with 'virtualbox' provider... 
[default] Clearing any previously set forwarded ports... 
[default] Clearing any previously set network interfaces... 
[default] Preparing network interfaces based on configuration... 
[default] Forwarding ports... 
[default] -- 22 => 2222 (adapter 1) 
[default] Booting VM... 
[default] Waiting for machine to boot. This may take a few minutes... 
DL is deprecated, please use Fiddle 
[default] Machine booted and ready! 
[default] Configuring and enabling network interfaces... 
[default] Mounting shared folders... 
[default] -- /vagrant 
[default] VM already provisioned. Run `vagrant provision` or use `--provision` to force it 

基本上,我需要知道如何设置vagrant(ubuntu)和Windows桌面之间的远程数据库连接。两个都在同一个桌面上运行。

+0

是什么让你觉得它正在运行PostgreSQL? 'netstat -ltnp','ps -ef | grep postgres'?如果它正在运行PostgreSQL,那么在'postgresql.conf'中设置的'listen_addresses'是什么? –

+0

@CraigRinger Listen_adresses ='*' – anvd

+0

@CraigRinger而且,问题已更新,谢谢 – anvd

回答

2

首先免责声明 - 我用VirtualBox和PostgreSQL的相当多,但我没用过无业游民,所以我的建议可以给出的是有限的。

根据您的描述和评论中的信息,我认为您的问题与虚拟机和主机环境之间的网络连接有关。

Virtualbox支持几种不同的网络仿真 - 例如NAT,桥接,内部网络,仅主机。当使用流浪者时,流浪者会尝试给予虚拟机以对准'vagrantfile'中的配置。

'NAT'适配器使用模拟NAT。这有点像在具有连接到互联网的路由器的专用网络内部的虚拟机。除非设置端口转发,否则您可以通过NAT接口进行传出连接,但不能传入连接。你流浪汉日志文件中这样说:

[default] -- 22 => 2222 (adapter 1) 

,表明2222端口被转发到端口22上的VM(至少这是我怎么解释这个打印)。这将允许您通过SSH从客户端(如运行在Windows环境中的putty)连接到VM。 Virtualbox在环回适配器(127.0.0)上的端口22上侦听。1)在Windows环境中,将任何连接转发到VM中的NAT适配器。

您的ifconfig显示了两个以太网适配器(除了回送) - 一个配置为地址10.0.2.15,另一个配置为33.33.33.33。

10.0.2.15是NAT适配器使用的地址。

33.33.33.33似乎已经在你的vagrantfile以下行配置:

# Create a private network, which allows host-only access to the machine 
# using a specific IP. 
    config.vm.network :private_network, ip: "33.33.33.33" 

所以,这是配置内部网络,可能使用“仅主机”在VirtualBox中适配器。问题是,我怀疑IP地址33.33.33.33对这样的网络无效。 virtualbox中的默认内部网络为网络192.168.56.0/24设置。

下面是我建议你遵循解决这个步骤:

  1. 之前做其他事情,仔细检查,你可以使用建立到PostgreSQL服务器的连接:从

    su - postgres 
    psql -h 127.0.0.1 template1 
    

    VM上的一个shell(即,通过ssh登录或使用VM控制台)。这确保postgresql正在运行并接受来自网络接口的连接。

  2. 确认Virtualbox VM配置为仅适配主机适配器为'适配器2'。从virtualbox GUI,选择虚拟机 - >设置 - >网络 - >适配器2.它应该说'仅适配器主机'。记下适配器的名称。

  3. 检查主机唯一网络的配置。从Virtualbox GUI,文件 - >首选项 - >网络 - >仅主机网络 - >从步骤1双击指定的网络。请注意IPv4地址和网络掩码。默认值是192.168.56.0和255.255.255.0。

    您应该使用专用网络。

  4. 在你的vagrant文​​件中,将IP地址更改为步骤2中看到的网络范围内的IP地址 - 例如。 192.168.56.10。然后使用需要的任何命令重新启动vagrant以使其重新配置虚拟机。

  5. 确认您可以从Windows命令提示符处ping使用的地址。此外,您可以使用相同的地址在Windows端使用SSH客户端连接VM。

  6. 如果所有这些工作都正常,您应该可以使用jdbc:postgresql://{ipaddr}:5432/test连接到postgresql服务器,其中{ipaddr}是您在步骤3,4中使用的IP地址。

0

首先检查您是否没有任何其他虚拟机使用相同的IP地址运行。 vagrant halt该机器并尝试ping“33.33.33.33”。它不应该回应。 (顺便说一句,33.33.33.x是某人拥有的公共网络,你应该使用private network,比如192.168.33.x.)

另外一些VPN软件可能会弄乱路由。你在运行吗?

本地主机地址不会在主机正常工作,除非你设置port forwarding

Vagrant.configure("2") do |config| 
    config.vm.network "forwarded_port", guest: 5432, host: 5432 
end 
+0

没有响应,如果我做vagrant停止,所以按预期工作。端口转发不起作用。同样的错误。没有VPN。 – anvd

+0

你能从客人连接到postgres服务器吗?你是否尝试过netcat/telnet? – tmatilai