MySQL支持IPv6

開啟和驗(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

MySQL 5.5 Reference Manual / IPv6 Support

linux環(huán)境下配置mysql5.6支持IPV6連接的方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容