• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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 USERGRANTREVOKE。例如:

      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。

    1. 使用适当的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在描述“服务器系统变量”。

    2. 以管理员身份,连接到服务器并为将通过::1本地IPv6主机地址连接的本地用户创建一个帐户:

      mysql> CREATE USER 'ipv6user'@'::1' IDENTIFIED BY 'ipv6pass';
      

      有关帐户名中IPv6地址的允许语法,请参见“创建账户”。除了该CREATE USER语句外,您还可以发出GRANT赋予该帐户特定特权的语句,尽管此过程中的其余步骤并非必需。

    3. 调用mysql客户端以使用新帐户连接到服务器:

      shell>mysql -h ::1 -u ipv6user -pipv6pass
      
    4. 尝试一些显示连接信息的简单语句:

      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地址”。

    1. 使用适当的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在描述“服务器系统变量”。

    2. 在服务器主机(2001:db8:0:f101::1)上,为将从客户端主机(2001:db8:0:f101::2)连接的用户创建一个帐户:

      mysql> CREATE USER 'remoteipv6user'@'2001:db8:0:f101::2' IDENTIFIED BY 'remoteipv6pass';
      
    3. 在客户端主机(2001:db8:0:f101::2)上,调用mysql客户端以使用新帐户连接到服务器:

      shell>mysql -h 2001:db8:0:f101::1 -u remoteipv6user -premoteipv6pass
      
    4. 尝试一些显示连接信息的简单语句:

      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客户端软件包。

    1. 通过访问此URL并注册,在Freenet6上创建一个帐户:

      http://gogonet.gogo6.com
      
    2. 创建帐户后,请转到以下URL,登录并为IPv6代理创建用户ID和密码:

      http://gogonet.gogo6.com/page/freenet6-registration
      
    3. 作为root,安装gogoc

      shell>emerge gogoc
      
    4. 编辑/etc/gogoc/gogoc.conf以设置useridpassword值。例如:

      userid=gogouser
      passwd=gogopass
      
    5. 启动gogoc

      shell> /etc/init.d/gogoc start
      

      每次系统启动时启动gogoc,请执行以下命令:

      shell> rc-update add gogoc default
      
    6. 使用ping6尝试ping主机:

      shell>ping6 ipv6.google.com
      
    7. 要参见您的IPv6地址:

      shell>ifconfig tun