通过JDBC和IPv6连接到MySQL(在Google Cloud SQL上)?

时间:2014-12-31 13:17:18

标签: jdbc ipv6 google-cloud-sql

我想使用JDBC和我在Google Developers Console上显示的实例的IPv6地址从外部应用程序连接到Google Cloud SQL(此处模糊不清):

String url      = "jdbc:mysql://abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd";
String user     = "root";
String password = "<also_obfuscated>";

connection = DriverManager.getConnection(url, user, password);

这会导致以下异常:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: 
Cannot load connection class because of underlying exception: 
'java.lang.NumberFormatException: 
For input string: "abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd"'.

我正在使用MySQL的latest JDBC驱动程序。通过JDBC和IPv4连接可以工作,但需要额外的配置步骤,并产生(小)额外成本。

甚至可以通过JDBC和IPv6连接到MySQL,如果是这样的话?

更新根据documentation,此网址应适用于IPv6:

jdbc:mysql://address=(protocol=tcp)(host=abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd)(port=3306)

但是,现在我得到以下例外:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 
Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. 
The driver has not received any packets from the server.

除了支持IPv6的JDBC驱动程序(根据文档),支持IPv6的客户端操作系统(我的操作系统应该是OS X Yosemite),以及支持IPv6的服务器操作系统(Google Cloud支持IPv6)因为它报告了IPv6服务器地址)为了使IPv6客户端 - 服务器连接正常工作,还需要有哪些其他部分?

E.g。我的ISP是否必须提供任何特定支持?

3 个答案:

答案 0 :(得分:3)

您需要在Cloud SQL控制台上的授权地址中注册您将进入Google Cloud SQL的IPV6地址。

您可以通过访问诸如whatismyv6.com等网站来检查IPv6地址。

然后,您所有的ISP所要做的就是提供一个稳定的IPV6地址(唉,即使到目前为止,并非所有人都这样做 - 唉,AT&amp; T Uverse,我家的ISP,例如)。

即使在我能够可靠地获得稳定的IPv6地址的地方,我最初也遇到了完全相同的问题 - 直到我突然明白,如果我要使用IPv6地址并且我已经授权的是一个IPv4,谷歌云SQL不能“翻译”到另一个,以找出我实际上是授权的! - )

答案 1 :(得分:0)

请注意,如果您没有并且无法获得要连接的IPv6地址(例如,从家庭计算机连接到尚未支持IPv6的ISP),那么您可以点击& #34;请求IPv4地址&#34; Google开发者控制台/存储/云端SQL / [您的Intance] /访问控制/ IP地址下的按钮,您将获得一个指定(在几秒钟内),每小时费用为0.01美元,如果您仍然可以从您免费的300美元信用卡中支付有这个功劳。将应用程序移动到Google的某个应用程序服务器后,您无疑将能够获得IPv6地址。不使用时释放IPv4地址以节省信用。

答案 2 :(得分:-1)

尝试

String url = "jdbc:mysql://[abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd]";

在URL中,文字IPv6地址必须被[]包围,以便解析器可以看到地址部分和可选端口号之间的差异,该端口号也由:分隔。

使用主机名而不是文字IP地址通常更容易。它保持独立于使用的IP协议,并且更改地址也更容易。