通过IPv6连接数据库的方法
本文总结了配置和验证MySQL数据库支持IPV6的方法,并扩展使用jdbc连接其他主流数据库url的方法,包括ipv4及ipv6两种连接格式。
ping6 -I eth0 ipv6
-
验证操作系统是否支持ipv6
-
本机测试:ping6 ::1//ifconfig
[root@XXX-ipv6 ~]# ping6 ::1 PING ::1(::1) 56 data bytes 64 bytes from ::1: icmp_seq=1 ttl=64 time=0.021 ms 64 bytes from ::1: icmp_seq=2 ttl=64 time=0.039 ms 64 bytes from ::1: icmp_seq=3 ttl=64 time=0.037 ms ^C --- ::1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1999ms rtt min/avg/max/mdev = 0.021/0.032/0.039/0.009 ms
[root@XXX-ipv6 ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450 inet 10.0.0.3 netmask 255.255.240.0 broadcast 10.0.15.255 inet6 2402:db40:5f00:3200:b366:ff34:e0e6:f28 prefixlen 128 scopeid 0x0<global> inet6 fe80::d662:97b7:3976:db84 prefixlen 64 scopeid 0x20<link> ether fa:16:3e:1b:6f:bd txqueuelen 1000 (Ethernet) RX packets 3143399 bytes 1013069846 (966.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4288824 bytes 1472280674 (1.3 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 705 bytes 81478 (79.5 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 705 bytes 81478 (79.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
-
远程测试:ping6 -I eth0 ipv6
[root@dbaudit-linux ~]# ping6 -I eth0 2402:db40:5f00:3200:b366:ff34:e0e6:f28 PING 2402:db40:5f00:3200:b366:ff34:e0e6:f28(2402:db40:5f00:3200:b366:ff34:e0e6:f28) from 2402:db40:5f00:3200:3046:d107:8c70:6342 eth0: 56 data bytes 64 bytes from 2402:db40:5f00:3200:b366:ff34:e0e6:f28: icmp_seq=1 ttl=64 time=0.242 ms 64 bytes from 2402:db40:5f00:3200:b366:ff34:e0e6:f28: icmp_seq=2 ttl=64 time=0.154 ms ^C --- 2402:db40:5f00:3200:b366:ff34:e0e6:f28 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 0.154/0.198/0.242/0.044 ms
-
-
MySQL支持IPV6连接配置
-
bind-address配置
修改my.cnf配置文件,在[mysqld]选项下增加bind-address = ::配置,把bind-address配置成::可以保证同时支持IPv4和IPv6的TCP/IP的连接。
[mysqld] bind-address = ::
重启mysql使配置生效:
/etc/init.d/mysqld restart
-
创建登陆用户
使用ipv4先登陆mysql,执行命令:
CREATE USER 'root'@'::1' IDENTIFIED BY '123456';
-
给root用户增加执行权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
-
本地连接MySQL
mysql -h ::1 -uroot -p
-
远程连接MySQL
mysql -h 2402:db40:5f00:3200:b366:ff34:e0e6:f28 -P3306 -uroot -p
-
netstat查看3306端口
netstat -ano|grep 3306
127.0.0.1:3306 表示监听端口绑定IPv4,只支持IPv4地址连接
:::3306 表示监听端口绑定IPv4和IPv6,支持IPv4和IPv6地址连接
-
-
使用jdbc连接数据库的url
总结几个常用数据库连接ipv6地址的连接字符串
-
连接MySQL
语法格式:address=(key=value)
// IPv4连接URL String jdbcIpv4Url_1 = "jdbc:mysql://IP:port/dbName"; String jdbcIpv4Url_2 = "jdbc:mysql://address=(protocol=tcp)(host=10.43.159.11)(port=3306)/dbName"; // IPv6连接URL String jdbcIpv6Url = "jdbc:mysql://address=(protocol=tcp)(host=2001:db8:1:0:20c:29ff:fe96:8b55)(port=3306)/database"; // hostname连接URL String hostNmaeUrl_1 = "jdbc:mysql://hostname:3306/dbName"; String hostNmaeUrl_2 = "jdbc:mysql://address=(protocol=tcp)(host="hostname")(port=3306)/dbName";
MySQL Connector 5.1和8.0版本的区别
使用MySQL Connector 8.0驱动, 对IPv6有了更好的支持,可以使用如下格式语法避免问题jdbc:mysql://[2001:db8:1:0:20c:29ff:fe96:8b55]:3306/databaseName jdbc:mysql://2001:db8:1:0:20c:29ff:fe96:8b55:3306/databaseName jdbc:mysql://[2001:db8:1:0:20c:29ff:fe96:8b55]/databaseName
-
连接sqlserver
1)使用com.microsoft.sqlserver.jdbc.SQLServerDriver驱动情况
String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; //设置连接属性 Properties pro = new Properties(); pro.setProperty("serverName", serverIP); pro.setProperty("portNumber", serverPort); pro.setProperty("databaseName", serverBase); pro.setProperty("user", username); pro.setProperty("password", password); String url = "jdbc:sqlserver://;"; Connection conn = DriverManager.getConnection(url,pro);
2)使用net.sourceforge.jtds.jdbc.Driver驱动的情况
<!-- maven 依赖--> <dependency> <groupId>net.sourceforge.jtds</groupId> <artifactId>jtds</artifactId> <version>1.3.1</version> </dependency> //设置驱动 String driver = "net.sourceforge.jtds.jdbc.Driver"; //连接字符串 String url = "jdbc:jtds:sqlserver:// [serverIP]:serverPort ;DatabaseName= serverBase;user=username;password=password;
-
连接Oracle
String ipv6url = "jdbc:oracle:thin:@[serverIP]:serverPort:serverBase;
-
连接mongodb
MongoClientURI connectionString = new MongoClientURI("mongodb://[serverIp]:serverPort”); MongoClientURI client = new MongoClient(connectionString);
-