Java/Spring使用IPv6地址连接到MySQL服务器

RT

地址格式

IPv6 地址有两个逻辑部分:64 位网络前缀和 64 位主机地址部分。(主机地址通常是从接口 MAC 地址自动生成的。)

IPv6 地址由 8 组 16 位十六进制值表示,以冒号(:)分隔,如下所示:

IPv6 地址的典型示例:

1
2001:0db8:85a3:0000:0000:8a2e:0370:7334

另外,十六进制数字不区分大小写。

使用IPv4地址连接到MYSQL的方法(传统方式)

1
2
3
4
urlString = "jdbc:mysql://10.144.1.216:3306/dbName";
Class.forName(driver);
DriverManager.setLoginTimeout(getConnectionTimeOut());
dbConnection = DriverManager.getConnection(urlString,user,password);

使用IPv6地址连接到MYSQL的方法(新方法)

1
2
3
4
urlString = "jdbc:mysql://address=(protocol=tcp)(host=fe80::5ed6:baff:fe14:a23e)(port=3306)/db";
Class.forName(driver);
DriverManager.setLoginTimeout(getConnectionTimeOut());
dbConnection = DriverManager.getConnection(urlString,user,password);

注意

如果直接在 IPv4 地址格式的基础上,将 IPv4 地址直接换成 IPv6 地址,启动项目时,可能会出现下面的异常:

1
2
3
4
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Cannot load connection class because of underlying exception: 'java.lang.NumberFormatException: For input string: "fe80::5ed6:baff:fe14:a23e]:3306"'.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

附 Spring 配置方式

1
2
3
4
spring.datasource.url=jdbc:mysql://address=(protocol=tcp)(host=fe80::5ed6:baff:fe14:a23e)(port=3306)/test?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

参考:

http://blog.ashwani.co.in/blog/2012-10-10/mysql-with-ipv6/

https://flyli815.iteye.com/blog/2125088

hoxis wechat
一个脱离了高级趣味的程序员,关注回复1024有惊喜~
赞赏一杯咖啡
  • 本文作者: hoxis | 微信公众号【不正经程序员】
  • 本文链接: https://hoxis.github.io/ipv6-mysql.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!
  • 并保留本声明和上方二维码。感谢您的阅读和支持!
0%