MySQL支持IPv6
开启和验证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.参考文档:
MySQL Connector/J 8.0 Download
MySQL支持IPv6的更多相关文章
- 让你的mysql或mariadb 支持ipv6
如果你在windows 或Linux系统已经安装了mysql/mariadb,并且操作系统本身已经支持了ipv6. 在/etc/my.conf 这样配置可以让mysql也支持ipv6 [mysqld] ...
- iOS 支持 IPv6
苹果的规定:2016年6月1日提交到App Store必须支持IPv6-only网络. 官方文档:https://developer.apple.com/library/mac/documentati ...
- Mysql支持的数据类型(总结)
一.数值类型 Mysql支持所有标准SQL中的数值类型,其中包括严格数据类型(INTEGER,SMALLINT,DECIMAL,NUMBERIC),以及近似数值数据类型(FLOAT,REAL,DOUB ...
- MySQL支持的数据类型(1)( 整数,小点,位)
整数类型 字节 最小值 最大值 tinyint 1 有符号-128 无符号0 有符号127 无符号255 smallint 2 有符号-32768 无符号0 有符号32767 无符号65535 m ...
- linux centos6.5支持ipv6
1.用ifconfig查看有没有inet6 addr,我的这个已经支持了,如果不支持请看第二步. 2.vim /etc/sysconfig/network 把这句改成:NETWORKING_IPV6= ...
- MySQL支持的数据类型
1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节 范围(-128~127) smallint(m) 2个字节 范围(-32768~32767) mediumint(m) 3 ...
- iOS应用支持IPV6,就那点事儿
原文连接 果然是苹果打个哈欠,iOS行业内就得起一次风暴呀.自从5月初Apple明文规定所有开发者在6月1号以后提交新版本需要支持IPV6-Only的网络,大家便开始热火朝天的研究如何支持IPV6 ...
- iOS应用支持IPV6
一.IPV6-Only支持是啥? 首先IPV6,是对IPV4地址空间的扩充.目前当我们用iOS设备连接上Wifi.4G.3G等网络时,设备被分配的地址均是IPV4地址,但是随着运营商和企业逐渐部署IP ...
- MySQL支持的列类型
MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型以及字符串(字符)类型.本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述. ...
随机推荐
- GO Exit Fatal panic
Exit() 应用程序(不只是函数)退出执行 defer 不会被执行(因为程序都退出了) log.Fatal() 输出打印内容 应用程序退出 defer 不会被执行 panic() 函数停止执行(不是 ...
- DBMS_RANDOM包详解
DBMS_RAMDOM包中一共包含9个存储过程和函数,其中6个是现在用的,3个是已经过时的: 当前版本11gR2 每次生成一个随机数oracle都会初始化一个种子,也可以调用seed过程自己初始化一个 ...
- What happens when more restrictive access is given to a derived class method in C++?
We have discussed a similar topic in Java here. Unlike Java, C++ allows to give more restrictive acc ...
- HashMap 和 HashSet
对于HashSet而言,系统采用Hash算法决定集合元素的存储位置,这样可以保证快速存取集合元素: 对于HashMap,系统将value当成key的附属,系统根据Hash算法来决定key的存储位置,这 ...
- java关键字volatile内存语义详细分析
volatile变量自身具有下列特性. 1.可见性.对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写 入. · 2.原子性:对任意单个volatile变量的读/ ...
- 使用cookie记录用户上次访问网页的时间,并返回到页面
package com.hopetesting.cookie;import javax.servlet.ServletException;import javax.servlet.annotation ...
- Jenkins制品管理
目录 一.简介 二.Jenkins管理制品 三.Nexus maven上传 jenkins上传 管理Docker镜像 管理raw 四.拷贝制品 五.版本号 Version Number 一.简介 制品 ...
- java 多线程 读写互斥锁ReentrantReadWriteLock:读读不互斥,读写互斥,写写互斥
ReentrantReadWriteLock: 类ReentrantLock具有相互互斥的排他效果,也就是说,同一时间,只有一个线程执行lock()方法后面的任务.这样做虽然可以解决问题,但是效率非常 ...
- mysql绿色版添加服务
- C++11 新特性:enable_shared_from_this
enable_shared_from_this是一个模板类,定义于头文件<memory>,其原型为:template< class T > class enable_share ...