我想使用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是否必须提供任何特定支持?
答案 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协议,并且更改地址也更容易。