开启和验证MySQL支持IPv6的方法,

此处使用的MySQL版本为mysql-5.5.35-linux2.6-x86_64。

1.验证操作系统支持IPv6,此处是Linux操作系统

ping6 ::1

2.配置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

3.创建测试用户

使用IPv4先登陆mysql,

执行命令CREATE USER 'ipv6test'@'::1' IDENTIFIED BY '123456';

4.给ipv6test用户增加执行权限

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

5.验证通过::1本地连接mysql数据库

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

6.新增"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

7.使用netstat查看3306端口:

netstat -an | grep 3306

0.0.0.0:3306

表示监听端口绑定IPv4,只支持IPv4地址连接

:::3306

表示监听端口绑定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地址时,必须使用address=(key=value)这种语法格式,

同时上面的主机名zhd-11可以对应IPv4地址也可以对应IPv6地址,

所以为了同时兼容IPv4,IPv6和hostname的情况,建议统一使用address=(key=value)这种语法格式连接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

可以使用简写版本,默认端口为3306:

address=(protocol=tcp)(host=2001:db8:1:0:20c:29ff:fe96:8b55),

或者把2001:db8:1:0:20c:29ff:fe96:8b55变为主机名hostname再填写,

或者尝试升级mysql版本提供更长的字符支持。

9.MySQL Connector 5.1和8.0版本的区别

使用MySQL Connector 5.1驱动,会发生步骤8中的问题;

使用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

下面这种语法格式是会报错的,不能使用:

jdbc:mysql://2001:db8:1:0:20c:29ff:fe96:8b55/databaseName

10.使用主机名hostname连接MySQL

使用root用户添加IPv6地址对应的主机名映射

vi /etc/hosts

2001:db8:1:0:20c:29ff:fe96:8b55 zdh-11-IPv6

测试主机名能否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

另外提一下,主机名对应的如果是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总结

11.1使用MySQL Connector 5.1驱动去连接MySQL

对应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

上面的主机名zhd-11可以对应IPv4地址也可以对应IPv6地址。

11.2 使用MySQL Connector 8.0驱动去连接MySQL

对应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

上面的主机名zhd-11可以对应IPv4地址也可以对应IPv6地址。

需要注意的是在8.0中address=(key=value)这种语法格式仍然是支持的。

12.参考文档:

5.1驱动对于IPv6的支持官方说明文档

8.0驱动对于IPv6的支持官方说明文档

MySQL Connector/J 8.0 Download

MySQL 5.5 Reference Manual / IPv6 Support

linux环境下配置mysql5.6支持IPV6连接的方法

MySQL支持IPv6的更多相关文章

  1. 让你的mysql或mariadb 支持ipv6

    如果你在windows 或Linux系统已经安装了mysql/mariadb,并且操作系统本身已经支持了ipv6. 在/etc/my.conf 这样配置可以让mysql也支持ipv6 [mysqld] ...

  2. iOS 支持 IPv6

    苹果的规定:2016年6月1日提交到App Store必须支持IPv6-only网络. 官方文档:https://developer.apple.com/library/mac/documentati ...

  3. Mysql支持的数据类型(总结)

    一.数值类型 Mysql支持所有标准SQL中的数值类型,其中包括严格数据类型(INTEGER,SMALLINT,DECIMAL,NUMBERIC),以及近似数值数据类型(FLOAT,REAL,DOUB ...

  4. MySQL支持的数据类型(1)( 整数,小点,位)

      整数类型 字节 最小值 最大值 tinyint 1 有符号-128 无符号0 有符号127 无符号255 smallint 2 有符号-32768 无符号0 有符号32767 无符号65535 m ...

  5. linux centos6.5支持ipv6

    1.用ifconfig查看有没有inet6 addr,我的这个已经支持了,如果不支持请看第二步. 2.vim /etc/sysconfig/network 把这句改成:NETWORKING_IPV6= ...

  6. MySQL支持的数据类型

    1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节 范围(-128~127) smallint(m) 2个字节 范围(-32768~32767) mediumint(m) 3 ...

  7. iOS应用支持IPV6,就那点事儿

    原文连接   果然是苹果打个哈欠,iOS行业内就得起一次风暴呀.自从5月初Apple明文规定所有开发者在6月1号以后提交新版本需要支持IPV6-Only的网络,大家便开始热火朝天的研究如何支持IPV6 ...

  8. iOS应用支持IPV6

    一.IPV6-Only支持是啥? 首先IPV6,是对IPV4地址空间的扩充.目前当我们用iOS设备连接上Wifi.4G.3G等网络时,设备被分配的地址均是IPV4地址,但是随着运营商和企业逐渐部署IP ...

  9. MySQL支持的列类型

     MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型以及字符串(字符)类型.本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述. ...

随机推荐

  1. What all is inherited from parent class in C++?

    派生类可以从基类中继承: (1)基类中定义的每个数据成员(尽管这些数据成员在派生类中不一定可以被访问): (2)基类中的每个普通成员函数(尽管这些成员函数在派生类中不一定可以被访问): (3)The ...

  2. springboot项目中集成ip2region遇到的问题及终极解决办法

    1.问题回顾 按照ip2region项目的官方集成到springboot项目后,运行测试一切都ok,没有任何问题.但是当项目打成可执行的jar包后再运行,却显示找不到ip2region.db,无法找到 ...

  3. Spring boot 数据源配置。

    配置文件 : spring boot  配置文件 有两种形式 ,一种是properties文件.一种是yml文件.案列使用properties文件. 数据源的默认配置 : spring boot 约定 ...

  4. 特定场景下的PLC 远程控制和数据读取

    最近有位博友提出了一种应用场景,根据工作中实际遇到的类似的产品应用场景,记录下自己的解决方案. 场景: 需要在云端控制和采集各个站点的PLC数据.各个站点是分散的,每个站点有公网访问能力,但是分散站点 ...

  5. Jaeger的客户端采样配置(Java版)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  6. LuoguP7714 「EZEC-10」排列排序 题解

    Content 给定一个 \(1\sim n\) 的一个排列 \(p\),你每次可以选择一个区间 \([l,r]\) 并花费 \(r-l+1\) 的代价将下标在这个区间内的所有数升序排序,求使得排列 ...

  7. 卸载zabbix

    1.首先停止zabbix运行 可以用官方命令 systemctl stop zabbix-server zabbix-agent httpd rh-php72-php-fpm 也可以直接kill -9 ...

  8. linux test使用

    文件 文件是否存在 test -f 判断文件是否存在 test -d 目录是否存在 test -e 文件名是否存在 通过echo $? 来得知test后的结果 test -f sh && ...

  9. JAVA实现websocket客户端

    pom依赖 <dependency> <groupId>org.java-websocket</groupId> <artifactId>Java-We ...

  10. 【LeetCode】1438. 绝对差不超过限制的最长连续子数组 Longest Continuous Subarray With Absolute Diff Less Than or Equal t

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 滑动窗口 日期 题目地址:https://leetco ...