MySQL支援IPv6-TODO

bivis發表於2018-08-22

MySQL支援IPv6
此處使用的MySQL版本為mysql-5.5.35-linux2.6-x86_64。

驗證作業系統支援IPv6,此處是Linux作業系統

ping6 ::1

配置MySQL支援IPv6連線

在MySQL啟動時繫結地址,在服務啟動時使用如下引數--bind-address=addr配置,
其中addr可以是IPv4或者IPv6地址,或者主機名hostname。
修改my.cnf配置檔案,在[mysqld]選項下增加bind-address = ::配置,
把bind-address配置成::可以保證同時支援IPV4和IPV6的TCP/IP的連線。

[mysqld]bind-address = ::

重啟mysql使配置生效:
/etc/init.d/mysqld restart

建立測試使用者

使用IPv4先登陸mysql,
執行命令CREATE USER 'ipv6test'@'::1' IDENTIFIED BY '123456';

給ipv6test使用者增加執行許可權

執行命令GRANT ALL PRIVILEGES ON . TO 'ipv6test'@'::1' IDENTIFIED BY '123456' WITH GRANT OPTION;

驗證透過::1本地連線mysql資料庫

輸入命令mysql -h ::1 -uipv6test -p123456

新增"root@%"就可任意ip訪問

和IPv4時沒有區別,如果已經配置了"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

使用netstat檢視3306埠:

netstat -an | grep 3306

0.0.0.0:3306
表示監聽埠繫結IPv4,只支援IPv4地址連線

:::3306
表示監聽埠繫結IPv4和IPv6,支援IPv4和IPv6地址連線

使用jdbc連線mysql的URL

// IPv4連線URL
// String jdbcIpv4Url = "jdbc: ";
// IPv6連線URL
// String jdbcIpv6Url = "jdbc: ";
注意使用IPv6地址時,必須使用address=(protocol=tcp)(host=2001:db8:1:0:20c:29ff:fe96:8b55)(port=3306)格式,
同時上面的格式中的host也相容IPv4的格式,如下:
address=(protocol=tcp)(host=127.0.0.1)(port=3306)
所以為了同時相容IPv4和IPv6,建議使用上面的格式連線MySQL。

注意下面的連線字串可能過長:
address=(protocol=tcp)(host=2001:db8:1:0:20c:29ff:fe96:8b55)(port=3306)
會有如下報錯:
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
可以使用簡寫版本:
address=(protocol=tcp)(host=2001:db8:1:0:20c:29ff:fe96:8b55),
或者把2001:db8:1:0:20c:29ff:fe96:8b55變為主機名hostname再填寫,
或者嘗試升級mysql版本提供更長的字元支援。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31551496/viewspace-2212512/,如需轉載,請註明出處,否則將追究法律責任。

相關文章