開啟和驗(yàn)證MySQL支持IPv6的方法,
此處使用的MySQL版本為mysql-5.5.35-linux2.6-x86_64。
1.驗(yàn)證操作系統(tǒng)支持IPv6,此處是Linux操作系統(tǒng)
ping6 ::1
2.配置MySQL支持IPv6連接
在MySQL啟動(dòng)時(shí)綁定地址,在服務(wù)啟動(dòng)時(shí)使用如下參數(shù)--bind-address=addr配置,
其中addr可以是IPv4或者IPv6地址,或者主機(jī)名hostname。
修改my.cnf配置文件,在[mysqld]選項(xiàng)下增加bind-address = ::配置,
把bind-address配置成::可以保證同時(shí)支持IPv4和IPv6的TCP/IP的連接。
[mysqld]
bind-address = ::
重啟mysql使配置生效:
/etc/init.d/mysqld restart
3.創(chuàng)建測(cè)試用戶
使用IPv4先登陸mysql,
執(zhí)行命令CREATE USER 'ipv6test'@'::1' IDENTIFIED BY '123456';
4.給ipv6test用戶增加執(zhí)行權(quán)限
執(zhí)行命令GRANT ALL PRIVILEGES ON . TO 'ipv6test'@'::1' IDENTIFIED BY '123456' WITH GRANT OPTION;
5.驗(yàn)證通過::1本地連接mysql數(shù)據(jù)庫
輸入命令mysql -h ::1 -uipv6test -p123456
6.新增"root@%"就可任意ip訪問,注意%通配,
和IPv4時(shí)沒有區(qū)別,如果已經(jīng)配置了"root@%"用戶,直接使用IPv6地址即可訪問。
grant all on . to root@'%' identified by 'zdh1234' with grant option;
mysql -h 2001:db8:1:0:20c:29ff:fe96:8b55 -uroot -pzdh1234
7.使用netstat查看3306端口:
netstat -an | grep 3306
0.0.0.0:3306
表示監(jiān)聽端口綁定IPv4,只支持IPv4地址連接
:::3306
表示監(jiān)聽端口綁定IPv4和IPv6,支持IPv4和IPv6地址連接
8.使用jdbc連接mysql的URL
// IPv4連接URL
String jdbcIpv4Url_1 = "jdbc:mysql://10.43.159.11:3306/databaseName";
String jdbcIpv4Url_2 = "jdbc:mysql://address=(protocol=tcp)(host=10.43.159.11)(port=3306)/databaseName";
// 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://zdh-11:3306/databaseName";
String hostNmaeUrl_2 = "jdbc:mysql://address=(protocol=tcp)(host=zdh-11)(port=3306)/databaseName";
注意使用IPv6地址時(shí),必須使用address=(key=value)這種語法格式,
同時(shí)上面的主機(jī)名zhd-11可以對(duì)應(yīng)IPv4地址也可以對(duì)應(yīng)IPv6地址,
所以為了同時(shí)兼容IPv4,IPv6和hostname的情況,建議統(tǒng)一使用address=(key=value)這種語法格式連接MySQL。
注意下面的連接字符串可能過長:
address=(protocol=tcp)(host=2001:db8:1:0:20c:29ff:fe96:8b55)(port=3306)
會(huì)有如下報(bào)錯(cuò):
SQLException : SQL state: HY000 java.sql.SQLException: String 'address=(protocol=tcp)(host=2001:db8:1:0:20c:29ff:fe96:8b55)(port=3306' is too long for host name (should be no longer than 60) ErrorCode: 1470
可以使用簡(jiǎn)寫版本,默認(rèn)端口為3306:
address=(protocol=tcp)(host=2001:db8:1:0:20c:29ff:fe96:8b55),
或者把2001:db8:1:0:20c:29ff:fe96:8b55變?yōu)橹鳈C(jī)名hostname再填寫,
或者嘗試升級(jí)mysql版本提供更長的字符支持。
9.MySQL Connector 5.1和8.0版本的區(qū)別
使用MySQL Connector 5.1驅(qū)動(dòng),會(huì)發(fā)生步驟8中的問題;
使用MySQL Connector 8.0驅(qū)動(dòng), 對(duì)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
下面這種語法格式是會(huì)報(bào)錯(cuò)的,不能使用:
jdbc:mysql://2001:db8:1:0:20c:29ff:fe96:8b55/databaseName
10.使用主機(jī)名hostname連接MySQL
使用root用戶添加IPv6地址對(duì)應(yīng)的主機(jī)名映射
vi /etc/hosts
2001:db8:1:0:20c:29ff:fe96:8b55 zdh-11-IPv6
測(cè)試主機(jī)名能否ping通
ping6 zdh-11-IPv6
然后可以使用如下兩種格式連接MySQL:
jdbc:mysql://zdh-11-IPv6:3306/databaseName
jdbc:mysql://address=(protocol=tcp)(host=zdh-11-IPv6)(port=3306)/databaseName
另外提一下,主機(jī)名對(duì)應(yīng)的如果是IPv4地址,
上面兩種格式也是通用的,如下:
10.43.159.11 zdh-11-IPv4
jdbc:mysql://zdh-11-IPv4:3306/databaseName
jdbc:mysql://address=(protocol=tcp)(host=zdh-11-IPv4)(port=3306)/databaseName
11.使用jdbc連接mysql的URL總結(jié)
11.1使用MySQL Connector 5.1驅(qū)動(dòng)去連接MySQL
對(duì)應(yīng)IPv4,IPv6和hostname都需要兼容的情況,推薦使用如下語法格式連接:
jdbc:mysql://address=(protocol=tcp)(host=10.43.159.11)(port=3306)/databaseName
jdbc:mysql://address=(protocol=tcp)(host=2001:db8:1:0:20c:29ff:fe96:8b55)(port=3306)/databaseName
jdbc:mysql://address=(protocol=tcp)(host=zdh-11)(port=3306)/databaseName
上面的主機(jī)名zhd-11可以對(duì)應(yīng)IPv4地址也可以對(duì)應(yīng)IPv6地址。
11.2 使用MySQL Connector 8.0驅(qū)動(dòng)去連接MySQL
對(duì)應(yīng)IPv4,IPv6和hostname都需要兼容的情況,推薦使用如下語法格式連接:
jdbc:mysql://10.43.159.11:3306/databaseName
jdbc:mysql://[2001:db8:1:0:20c:29ff:fe96:8b55]:3306/databaseName
jdbc:mysql://zdh-11:3306/databaseName
上面的主機(jī)名zhd-11可以對(duì)應(yīng)IPv4地址也可以對(duì)應(yīng)IPv6地址。
需要注意的是在8.0中address=(key=value)這種語法格式仍然是支持的。
12.參考文檔:
5.1驅(qū)動(dòng)對(duì)于IPv6的支持官方說明文檔
8.0驅(qū)動(dòng)對(duì)于IPv6的支持官方說明文檔
MySQL Connector/J 8.0 Download