因为撸代码需要, 我在虚拟机里装了一个 mysql 方便调试, 但由于最近撸代码环境变化频繁, 子网前缀一直变, 导致虚拟机的 ip 也总是变, 配置起来真麻烦, 于是我把虚拟机的网络设置为 NAT + port forwarding, 希望这样能通过 127.0.0.1 + 映射的端口号来访问虚拟机的 mysql, 结果就悲剧了。。。具体情况如下:
1 在 virtualbox 里装了一个 ubuntu, 上面安装了 mysql server, 服务端口号 3306,
2 然后在 virtualbox 里把网络设置为 NAT, 将虚拟机的 3306 端口映射为 host 的 9999 端口
这时, 在 host 机上用 mysql workbench 可以正常连接 127.0.0.1:9999, telnet 127.0.0.1 9999 也可以收到 mysql 的输入密码提示, 说明这套配置应该是正确的。
但是奇怪的是, 用 jdbc 在代码中去连时就不行了, 测试代码:
String url = "jdbc:mysql://127.0.0.1:9999/test?user=utest&password=pwd";
Class.forName ("com.mysql.jdbc.Driver").newInstance();
Connection cOnn= DriverManager.getConnection(url);
报错 “ CommunicationsException: Communications link failure .... The last packet sent successfully to the server was 0 milliseconds ago.”
发在 stackoverflow 上半天没人理, 不知这里有没有人清楚原因?
1 在 virtualbox 里装了一个 ubuntu, 上面安装了 mysql server, 服务端口号 3306,
2 然后在 virtualbox 里把网络设置为 NAT, 将虚拟机的 3306 端口映射为 host 的 9999 端口
这时, 在 host 机上用 mysql workbench 可以正常连接 127.0.0.1:9999, telnet 127.0.0.1 9999 也可以收到 mysql 的输入密码提示, 说明这套配置应该是正确的。
但是奇怪的是, 用 jdbc 在代码中去连时就不行了, 测试代码:
String url = "jdbc:mysql://127.0.0.1:9999/test?user=utest&password=pwd";
Class.forName ("com.mysql.jdbc.Driver").newInstance();
Connection cOnn= DriverManager.getConnection(url);
报错 “ CommunicationsException: Communications link failure .... The last packet sent successfully to the server was 0 milliseconds ago.”
发在 stackoverflow 上半天没人理, 不知这里有没有人清楚原因?

