MySQL中如何使用IPv6
这篇文章给大家介绍MySQL中如何使用IPv6,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
MySQL对IPv6的支持包括这些功能:
.MySQL服务器可以接受客户端通过IPv6进行TCP/IP连接。例如下面的命令是在本机通过IPv6来连接MySQL服务器:
[mysql@localhost~]$mysql-h::1-uusername-ppassword
要使用这个功能必须满足以下两个条件;
.服务器操作系统必须被配置支持IPv6
.MySQL服务器缺省配置必须除了支持IPv4的连接之外还要支持IPv6的连接。为了改变缺省配置可以在启动MySQL服务器时使用合适的--bind-address选项。
.MySQL账号名允许使用IPv6地址能让DBA为通过IPv6连接到服务器的客户端指定权限。例如:
mysql>createuser'v6root'@'::1'identifiedby"abcd";mysql>grantselectonmysql.*to'v6root'@'::1';
.IPv6功能支持在字符串和内部格式IPv6地址格式之间进行转换并且检查其是否为有效的IPv6地址。例如
INET6_ATON()和INET6_NTOA()类似于INET_ATON()和INET_NTOA(),但除了能处理IPv4地址之外还能处理IPv6地址。
验证操作系统是否支持IPv6
在MySQL服务器可以接受IPv6的连接之前,服务器所在操作系统主机必须支持IPv6。例如在Linux主机上执行以下命令:
[root@localhost~]#ping6::1PING::1(::1)56databytes64bytesfrom::1:icmp_seq=1ttl=64time=0.100ms64bytesfrom::1:icmp_seq=2ttl=64time=0.056ms64bytesfrom::1:icmp_seq=3ttl=64time=0.035ms64bytesfrom::1:icmp_seq=4ttl=64time=0.039ms....
为了对操作系统网络接口生成详细的描述,执行ifconfig -a并查看输出中的IPv6地址。
[root@localhost~]#ifconfig-adocker0:flags=4163mtu1500inet172.17.0.1netmask255.255.0.0broadcast172.17.255.255inet6fe80::42:15ff:fe1d:e05aprefixlen64scopeid0x20ether02:42:15:1d:e0:5atxqueuelen0(Ethernet)RXpackets15bytes3638(3.5KiB)RXerrors0dropped0overruns0frame0TXpackets33bytes3825(3.7KiB)TXerrors0dropped0overruns0carrier0collisions0ens160:flags=4163mtu1500inet192.168.1.250netmask255.255.255.0broadcast192.168.1.255inet6fe80::250:56ff:fea3:90e6prefixlen64scopeid0x20ether00:50:56:a3:90:e6txqueuelen1000(Ethernet)RXpackets5634313bytes364548809(347.6MiB)RXerrors0dropped0overruns0frame0TXpackets19054bytes2337541(2.2MiB)TXerrors0dropped0overruns0carrier0collisions0
如果你的操作系统不支持IPv6,查看操作系统文档查找相关指令来启用IPv6。这可能只需要重新配置现有的网络接口来增加一个IPv6地址。或者需要执行更多的修改,比如使用IPv6选项来重建内核。
配置MySQL服务器允许IPv6连接
MySQL服务器对于TCP/IP连接会监听单个网络套接字。这种套接字被绑定到单个地址,但是可能一个地址映射到多个网络接口。为了指定一个地址,在服务器启动时使用--bind-address=addr选项,addr是IPv4或IPv6地址或主机名。(在MySQL 5.5.3之前不支持IPv6地址)。如果addr是主机名,服务器会解析这个主机名为一个IP地址并绑定到这个地址。
服务器对不同类型地址的处理如下:
.如果地址为*,如果服务器主机支持IPv6那么服务器可以接受来自所有服务器上所有IPv6和IPv4网络接口的TCP/IP连接,或者否则只会接受来自所有服务器上IPv4地址的TCP/IP连接。使用这个地址允许接受来自所有服务器网络接口的IPv4和IPv6连接。这个值是缺省值。
.如果地址为0.0.0.0,服务器只能接受来自所有服务器上IPv4网络接口的TCP/IP连接。
.如果地址为::,服务器接受来自所有服务器上的IPv4和IPv6网络接口的TCP/IP连接,这使用这个地址允许接受来自所有服务器网络接口的IPv4和IPv6连接。
.如果地址为IPv4映射地址,服务器接受来自这个地址的TCP/IP连接,这个地址是IPv4或IPv6格式。例如,如果服务器被绑定到::ffff:127.0.0.1,客户端可以使用--host=127.0.0.1或--host=::ffff:127.0.0.1来进行连接。
.如果地址为常规的IPv4或IPv6地址(比如127.0.0.1或::1),服务器只能接受IPv4或IPv6地址的TCP/IP连接。
如果倾向于绑定服务器到一个特定地址,确保mysql.user授权表包含一个有管理权限的用户可以使用这个地址进行连接。否则你将不能关闭服务器。例如,如果你倾向绑定服务器到*,你可以使用现有的所有账号来连接。但是如果你绑定服务器到::1,它只能接受这个地址的连接。在这种情况下,首先确保'root'@'::1'账号在mysql.user表中存在,所以可以仍然连接到服务器并关闭它。
使用IPv6本地主机地址连接MySQL服务器
下面介绍如何配置MySQL允许客户端通过IPv6(::1本地主机地址)连接到本地服务器。
1.在启动MySQL服务器时使用合适的--bind-address选项来允许服务器接受IPv6连接。例如,在my.cnf选项文件中设置bind-address并重启服务器
[mysqld]......bind-address=*......[root@localhost~]#systemctlstopmysqld[root@localhost~]#systemctlstartmysqld[root@localhost~]#systemctlstatusmysqld*mysqld.service-LSB:startandstopMySQLLoaded:loaded(/etc/rc.d/init.d/mysqld;bad;vendorpreset:disabled)Active:active(running)since二2020-01-1416:56:48CST;5sagoDocs:man:systemd-sysv-generator(8)Process:23257ExecStart=/etc/rc.d/init.d/mysqldstart(code=exited,status=0/SUCCESS)Tasks:28Memory:168.2MCGroup:/system.slice/mysqld.service|-23273/bin/sh/mysqlsoft/mysql/bin/mysqld_safe--datadir=/mysqldata/mysql--pid-file=/mysqldata/mysql/mysqld.pid`-23591/mysqlsoft/mysql/bin/mysqld--basedir=/mysqlsoft/mysql--datadir=/mysqldata/mysql--plugin-dir=/mysqlsoft/mysql/lib/plugin--user=mysql--log-error=/mysqldata/mysql/mysql.err--pid-file=/mysqldata/mysql/mysqld.pid...1月1416:56:46localhost.localdomainsystemd[1]:StartingLSB:startandstopMySQL...1月1416:56:48localhost.localdomainmysqld[23257]:StartingMySQL..SUCCESS!1月1416:56:48localhost.localdomainsystemd[1]:StartedLSB:startandstopMySQL.
另外,你也可以绑定服务器到::1,但这会使用服务器更加受限于TCP/IP连接。它只能接受单个IPv6地址的连接并且会拒绝IPv4的连接。
2.作为管理员,连接到服务器创建一个本地用户账号它将使用::1本地IPv6主机地址进行连接
mysql>createuser'ipv6root'@'::1'identifiedby"abcd";QueryOK,0rowsaffected(0.01sec)mysql>grantselecton*.*to'ipv6root'@'::1';QueryOK,0rowsaffected(0.02sec)
3.调用mysql客户端工具使用新创建的账号连接服务器
[mysql@localhostmysql]$mysql-h::1-uipv6root-pabcdmysqlmysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.ReadingtableinformationforcompletionoftableandcolumnnamesYoucanturnoffthisfeaturetogetaquickerstartupwith-AWelcometotheMySQLmonitor.Commandsendwith;or\g.YourMySQLconnectionidis7Serverversion:5.7.26-logSourcedistributionCopyright(c)2000,2019,Oracleand/oritsaffiliates.Allrightsreserved.OracleisaregisteredtrademarkofOracleCorporationand/oritsaffiliates.Othernamesmaybetrademarksoftheirrespectiveowners.Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.mysql>selecthost,userfromuser;+-----------+---------------+|host|user|+-----------+---------------+|%|csroot||%|root||::1|ipv6root||localhost|mysql.session||localhost|mysql.sys|+-----------+---------------+5rowsinset(0.00sec)
4.执行status命令来显示连接信息
mysql>status--------------mysqlVer14.14Distrib5.7.26,forLinux(x86_64)usingEditLinewrapperConnectionid:7Currentdatabase:mysqlCurrentuser:ipv6root@localhostSSL:CipherinuseisDHE-RSA-AES256-SHACurrentpager:stdoutUsingoutfile:''Usingdelimiter:;Serverversion:5.7.26-logSourcedistributionProtocolversion:10Connection:::1viaTCP/IPServercharacterset:utf8mb4Dbcharacterset:utf8mb4Clientcharacterset:gb2312Conn.characterset:gb2312TCPport:3306Uptime:11min47secThreads:1Questions:263Slowqueries:0Opens:336Flushtables:1Opentables:329Queriespersecondavg:0.371--------------mysql>SELECTCURRENT_USER(),@@bind_address;+----------------+----------------+|CURRENT_USER()|@@bind_address|+----------------+----------------+|ipv6root@::1|*|+----------------+----------------+1rowinset(0.00sec)
使用IPv6非本地主机地址连接MySQL服务器
下面将介绍如何配置MySQL服务器允许远程主机通过IPv6来连接MySQL服务器。这类似于在本地主机使用IPv6连接MySQL服务器一样,但服务器与客户端在不同的主机上,每台主机有不同的IPv6地址。
服务器主机的IPv6地址为2018::1
[root@shard1network-scripts]#ifconfig-aens160:flags=4163mtu1500inet62018::1prefixlen64scopeid0x0ether00:50:56:a0:51:0ctxqueuelen1000(Ethernet)RXpackets27089788bytes2770300693(2.5GiB)RXerrors0dropped6overruns0frame0TXpackets6720001bytes532979878(508.2MiB)TXerrors0dropped0overruns0carrier0collisions0
客户端主机的IPv6地址为2018::2
ens160:flags=4163mtu1500inet62018::2prefixlen64scopeid0x0ether00:50:56:a0:4e:69txqueuelen1000(Ethernet)RXpackets25337245bytes1913014541(1.7GiB)RXerrors0dropped127overruns0frame0TXpackets1536650bytes166036937(158.3MiB)TXerrors0dropped0overruns0carrier0collisions0
具体操作如下:
1.在启动MySQL服务器时使用合适的--bind-address选项来允许服务器接受IPv6连接。例如,在my.cnf选项文件中设置bind-address并重启服务器
[mysqld]......bind-address=*......[root@localhost~]#systemctlstopmysqld[root@localhost~]#systemctlstartmysqld[root@localhost~]#systemctlstatusmysqld*mysqld.service-LSB:startandstopMySQLLoaded:loaded(/etc/rc.d/init.d/mysqld;bad;vendorpreset:disabled)Active:active(running)since二2020-01-1416:56:48CST;5sagoDocs:man:systemd-sysv-generator(8)Process:23257ExecStart=/etc/rc.d/init.d/mysqldstart(code=exited,status=0/SUCCESS)Tasks:28Memory:168.2MCGroup:/system.slice/mysqld.service|-23273/bin/sh/mysqlsoft/mysql/bin/mysqld_safe--datadir=/mysqldata/mysql--pid-file=/mysqldata/mysql/mysqld.pid`-23591/mysqlsoft/mysql/bin/mysqld--basedir=/mysqlsoft/mysql--datadir=/mysqldata/mysql--plugin-dir=/mysqlsoft/mysql/lib/plugin--user=mysql--log-error=/mysqldata/mysql/mysql.err--pid-file=/mysqldata/mysql/mysqld.pid...1月1416:56:46localhost.localdomainsystemd[1]:StartingLSB:startandstopMySQL...1月1416:56:48localhost.localdomainmysqld[23257]:StartingMySQL..SUCCESS!1月1416:56:48localhost.localdomainsystemd[1]:StartedLSB:startandstopMySQL.
另外,可以绑定服务器到2018:db1:0:f01::1,但这会使用服务器更加受限于TCP/IP连接。它只能接受单个IPv6地址的连接并且会拒绝IPv4的连接。
2.在服务器中(2018::1)创建一个账号将从客户端主机(2018::2)上连接服务器
mysql>createuser'csroot'@'%'identifiedby"123456";QueryOK,0rowsaffected(0.01sec)mysql>GRANTALLPRIVILEGESON*.*TO'csroot'@'%'IDENTIFIEDBY'123456'WITHGRANTOPTION;QueryOK,0rowsaffected(0.00sec)
3.在客户端主机上(2018::2),调用mysql客户端使用创建的新账号来连接服务器(我这时使用MariaDB作为客户端工具)
-bash-4.2$mysql-h2018::1-ucsroot-p123456mysqlReadingtableinformationforcompletionoftableandcolumnnamesYoucanturnoffthisfeaturetogetaquickerstartupwith-AWelcometotheMariaDBmonitor.Commandsendwith;or\g.YourMySQLconnectionidis6Serverversion:5.6.23MySQLCommunityServer(GPL)Copyright(c)2000,2018,Oracle,MariaDBCorporationAbandothers.Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.MySQL[mysql]>
4.执行status命令来显示连接信息
MySQL[mysql]>status--------------mysqlVer15.1Distrib10.0.38-MariaDB,forLinux(x86_64)usingreadline5.1Connectionid:6Currentdatabase:mysqlCurrentuser:csroot@2018::2SSL:NotinuseCurrentpager:stdoutUsingoutfile:''Usingdelimiter:;Server:MySQLServerversion:5.6.23MySQLCommunityServer(GPL)Protocolversion:10Connection:2018::1viaTCP/IPServercharacterset:latin1Dbcharacterset:latin1Clientcharacterset:gb2312Conn.characterset:gb2312TCPport:3306Uptime:34days50min24secThreads:2Questions:175Slowqueries:0Opens:87Flushtables:1Opentables:80Queriespersecondavg:0.000--------------MySQL[mysql]>selectcurrent_user(),@@bind_address;+----------------+----------------+|current_user()|@@bind_address|+----------------+----------------+|csroot@%|*|+----------------+----------------+1rowinset(0.00sec)
关于MySQL中如何使用IPv6就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。