sql - 使用 jdbc 配置 SQL 连接 - vagrant

标签 sql linux postgresql jdbc vagrant

我有一个 vagrant 服务器:

postgres@precise32:/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 = '*' 

Vagrant 日志

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 桌面之间设置远程数据库连接。两者都在同一个桌面上运行。

最佳答案

首先是一个免责声明——我经常使用 virtualbox 和 postgresql,但我没有使用 vagrant,所以我能提供的建议是有限的。

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

Virtualbox 支持几种不同的网络模拟 - 例如 NAT、桥接、内部网络、仅主机。使用 vagrant 时,vagrant 将尝试管理 VM 以与“vagrantfile”中的配置保持一致。

“NAT”适配器使用模拟 NAT。这有点像将 VM 置于专用网络内部,并通过路由器将其连接到 Internet。您可以通过 NAT 接口(interface)进行传出连接,但不能进行传入连接,除非您设置了端口转发。你的 vagrant 日志文件是这样写的:

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

表明端口 2222 正在转发到 VM 上的端口 22(至少我是这样解释这个打印输出的)。这将允许您从客户端(例如在 Windows 环境中运行的 putty)通过 SSH 连接到 VM。 Virtualbox 在 Windows 环境中监听环回适配器 (127.0.0.1) 上的端口 22,将任何连接转发到 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 中使用了一个“host-only”适配器。问题是,我怀疑 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 正在运行并接受来自网络接口(interface)的连接。

  2. 确认 Virtualbox VM 已针对仅主机适配器配置为“适配器 2”。从 virtualbox GUI 中,选择 VM -> settings -> Network -> Adapter 2。它应该显示“Host-only adaptor”。记下适配器的名称。

  3. 检查仅主机网络的配置。在 Virtualbox GUI 中,File -> Preferences -> Network -> Host-Only Networks -> 双击步骤 1 中的命名网络。记下 IPv4 地址和网络掩码。默认值为 192.168.56.0 和 255.255.255.0。

    您应该使用专用网络。

  4. 在您的 vagrantfile 中,将 IP 地址更改为在第 2 步中看到的网络范围内的 IP 地址 - 例如。 192.168.56.10。然后使用任何需要的命令重新启动 vagrant 以重新配置 VM。

  5. 确认您可以从 Windows 命令提示符中 ping 通您使用的地址。此外,您还可以使用同一地址在 Windows 端使用 SSH 客户端连接虚拟机。

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

关于sql - 使用 jdbc 配置 SQL 连接 - vagrant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22081760/

相关文章:

sql - 如何在不使用 SQL 中的相关子查询的情况下获取最早的日期?

c - 如果我们将两个具有不同数据类型的同名变量链接起来怎么办?

linux - 构建 Docker 容器时出错

sql - 在 PostgreSql 的 jsonb 中没有键的嵌套搜索

ruby-on-rails - 多个字段的唯一索引......但不是你想的那样

sql - 如何关闭与数据库的现有连接

sql - 有没有办法优化我的 bigquery sql 以便运行得更快?

c# - 将 GroupBy DateTime 与 Entity Framework 一起使用会引发异常

linux - PyQt5错误 "PyCapsule_GetPointer called with incorrect name"

sql - 获取订单总和为1000的订单号