MySQL服务器IPv6支持
MySQL中对IPv6的支持包括以下功能:
MySQL服务器可以接受来自通过IPv6连接的客户端的TCP / IP连接。例如,此命令通过IPv6连接到本地主机上的MySQL服务器:
shell>
mysql -h ::1要使用此功能,必须满足两个条件:
- 您的系统必须配置为支持IPv6。
- 默认的MySQL服务器配置除IPv4连接外还允许IPv6连接。要更改默认配置,请在将
bind_address
系统变量设置为适当值的情况下启动服务器。请参见“服务器系统变量”。
MySQL帐户名称允许IPv6地址使DBA能够为通过IPv6连接到服务器的客户端指定特权。请参见“创建账户”。IPv6地址可以在帐户名在这样的语句中指定
CREATE USER
,GRANT
和REVOKE
。例如:mysql>
CREATE USER 'bill'@'::1'IDENTIFIED BY 'secret'; mysql>GRANT SELECT ON mydb.*TO 'bill'@'::1';- IPv6功能可在字符串格式和内部格式IPv6地址格式之间进行转换,并检查值是否表示有效的IPv6地址。例如,
INET6_ATON()
以及INET6_NTOA()
类似于INET_ATON()
和INET_NTOA()
,但除了IPv4地址处理IPv6地址。请参见“其他功能”。 - 从MySQL 8.0.14开始,“组复制”组成员可以使用IPv6地址在组内进行通信。组可以包含使用IPv6的成员和使用IPv4的成员的混合。请参见“对IPv6以及对IPv6和IPv4混合组的支持”。
以下各节介绍如何设置MySQL,以便客户端可以通过IPv6连接到服务器。
验证系统对IPv6的支持
在MySQL Server可以接受IPv6连接之前,服务器主机上的操作系统必须支持IPv6。作为确定是否正确的简单测试,请尝试以下命令:
shell>ping6 ::1 16 bytes from ::1, icmp_seq=0 hlim=64 time=0.171 ms 16 bytes from ::1, icmp_seq=1 hlim=64 time=0.077 ms ...
要生成系统网络接口的描述,请调用ifconfig -并在输出中查找IPv6地址。
如果您的主机不支持IPv6,请查阅系统文档以获取有关启用它的说明。可能您只需要重新配置现有的网络接口即可添加IPv6地址。或者可能需要进行更广泛的更改,例如在启用IPv6选项的情况下重建内核。
这些链接可能有助于在各种平台上设置IPv6:
- windows
- Gentoo Linux
- Ubuntu Linux
- Linux(通用)
- 苹果系统
配置MySQL服务器允许IPv6连接
MySQL服务器在一个或多个网络套接字上侦听TCP / IP连接。每个套接字都绑定到一个地址,但是一个地址可以映射到多个网络接口。
bind_address
在服务器启动时设置系统变量,以指定服务器实例接受的TCP / IP连接。从MySQL 8.0.13开始,您可以为此选项指定多个值,包括IPv6地址,IPv4地址和解析为IPv6或IPv4地址的主机名的任意组合。或者,您可以指定允许在多个网络接口上侦听的通配符地址格式之一。缺省值*或值::
允许所有服务器主机IPv4和IPv6接口上的IPv4和IPv6连接。欲了解更多信息,请参阅bind_address
在描述“服务器系统变量”。
使用IPv6本地主机地址进行连接
以下过程显示了如何配置MySQL以允许使用::1
本地主机地址连接到本地服务器的客户端进行IPv6连接。此处给出的说明假定您的系统支持IPv6。
使用适当的
bind_address
设置启动MySQL服务器以允许其接受IPv6连接。例如,将以下行放入服务器选项文件中,然后重新启动服务器:[mysqld] bind_address = *
将*(或
::
)指定为的值将bind_address
允许所有服务器主机IPv4和IPv6接口上的IPv4和IPv6连接。如果要将服务器绑定到特定的地址列表,则可以从MySQL 8.0.13开始,通过指定逗号分隔的值列表来执行此操作bind_address
。此示例指定IPv4和IPv6的本地主机地址:[mysqld] bind_address = 127.0.0.1,::1
欲了解更多信息,请参阅
bind_address
在描述“服务器系统变量”。以管理员身份,连接到服务器并为将通过
::1
本地IPv6主机地址连接的本地用户创建一个帐户:mysql>
CREATE USER 'ipv6user'@'::1'IDENTIFIED BY 'ipv6pass';有关帐户名中IPv6地址的允许语法,请参见“创建账户”。除了该
CREATE USER
语句外,您还可以发出GRANT
赋予该帐户特定特权的语句,尽管此过程中的其余步骤并非必需。调用mysql客户端以使用新帐户连接到服务器:
shell>
mysql -h ::1 -u ipv6user -pipv6pass尝试一些显示连接信息的简单语句:
mysql>
STATUS ...Connection : ::1 via TCP/IP ... mysql>SELECT CURRENT_USER(), @@bind_address; +---------------- +---------------- + | CURRENT_USER() | @@bind_address | +---------------- +---------------- + | ipv6user@::1 | :: | +---------------- +---------------- +
使用IPv6非本地主机地址进行连接
以下过程显示了如何配置MySQL以允许远程客户端进行IPv6连接。与本地客户端的上述过程类似,但是服务器和客户端主机是不同的,并且每个主机都有自己的非本地IPv6地址。该示例使用以下地址:
Server host: 2001:db8:0:f101::1 Client host: 2001:db8:0:f101::2
这些地址是从IANA建议的非路由地址范围中选择的,出于文档目的,并且足以在本地网络上进行测试。要接受来自本地网络外部客户端的IPv6连接,服务器主机必须具有公共地址。如果您的网络提供商为您分配了一个IPv6地址,则可以使用该地址。否则,获取地址的另一种方法是使用IPv6代理。请参见“从代理获取IPv6地址”。
使用适当的
bind_address
设置启动MySQL服务器以允许其接受IPv6连接。例如,将以下行放入服务器选项文件中,然后重新启动服务器:[mysqld] bind_address = *
将*(或
::
)指定为的值将bind_address
允许所有服务器主机IPv4和IPv6接口上的IPv4和IPv6连接。如果要将服务器绑定到特定的地址列表,则可以从MySQL 8.0.13开始,通过指定逗号分隔的值列表来执行此操作bind_address
。本示例指定一个IPv4地址以及所需的服务器主机IPv6地址:[mysqld] bind_address = 198.51.100.20,2001:db8:0:f101::1
欲了解更多信息,请参阅
bind_address
在描述“服务器系统变量”。在服务器主机(
2001:db8:0:f101::1
)上,为将从客户端主机(2001:db8:0:f101::2
)连接的用户创建一个帐户:mysql>
CREATE USER 'remoteipv6user'@'2001:db8:0:f101::2'IDENTIFIED BY 'remoteipv6pass';在客户端主机(
2001:db8:0:f101::2
)上,调用mysql客户端以使用新帐户连接到服务器:shell>
mysql -h 2001:db8:0:f101::1 -u remoteipv6user -premoteipv6pass尝试一些显示连接信息的简单语句:
mysql>
STATUS ...Connection : 2001:db8:0:f101::1 via TCP/IP ... mysql>SELECT CURRENT_USER(), @@bind_address; +----------------------------------- +---------------- + | CURRENT_USER() | @@bind_address | +----------------------------------- +---------------- + | remoteipv6user@2001:db8:0:f101::2 | :: | +----------------------------------- +---------------- +
从代理获取IPv6地址
如果没有使系统通过本地网络外部的IPv6进行通信的公共IPv6地址,则可以从IPv6代理获取一个。在维基百科的IPv6隧道代理页列出了几种经纪人和他们的功能,如是否可提供静态地址,支持的路由协议。
将服务器主机配置为使用代理提供的IPv6地址后,以适当的bind_address
设置启动MySQL服务器,以允许该服务器接受IPv6连接。您可以指定*(或::
)作为bind_address
值,或将服务器绑定到代理提供的特定IPv6地址。欲了解更多信息,请参阅bind_address
在描述“服务器系统变量”。
请注意,如果代理分配动态地址,则下次您连接到代理时,为系统提供的地址可能会更改。如果是这样,则您使用该名称创建的任何帐户的原始地址都将无效。要绑定到特定地址但避免出现地址更改问题,您可以与代理安排静态IPv6地址。
以下示例显示了如何在Gentoo Linux 上将 Freenet6用作代理和gogoc IPv6客户端软件包。
通过访问此URL并注册,在Freenet6上创建一个帐户:
http://gogonet.gogo6.com
创建帐户后,请转到以下URL,登录并为IPv6代理创建用户ID和密码:
http://gogonet.gogo6.com/page/freenet6-registration
作为
root
,安装gogoc:shell>
emerge gogoc编辑
/etc/gogoc/gogoc.conf
以设置userid
和password
值。例如:userid=gogouser passwd=gogopass
启动gogoc:
shell>
/etc/init.d/gogoc start要在每次系统启动时启动gogoc,请执行以下命令:
shell>
rc-update add gogoc default使用ping6尝试ping主机:
shell>
ping6 ipv6.google.com要参见您的IPv6地址:
shell>
ifconfig tun