IPv6 for MySQL

      網友投稿 674 2025-04-01

      Mysql對IPv6的支持包括這些功能:

      .Mysql服務器可以接受客戶端通過IPv6進行TCP/IP連接。例如下面的命令是在本機通過IPv6來連接MySQL服務器:

      [mysql@localhost ~]$ mysql -h ::1 -uusername -ppassword

      IPv6 for MySQL

      要使用這個功能必須滿足以下兩個條件;

      .服務器操作系統必須被配置支持IPv6

      .MySQL服務器缺省配置必須除了支持IPv4的連接之外還要支持IPv6的連接。為了改變缺省配置可以在啟動MySQL服務器時使用合適的–bind-address選項。

      .MySQL賬號名允許使用IPv6地址能讓DBA為通過IPv6連接到服務器的客戶端指定權限。例如:

      mysql> create user ‘v6root’@’::1’ identified by “abcd”;

      mysql> grant select on mysql.* to ‘v6root’@’::1’;

      .IPv6功能支持在字符串和內部格式IPv6地址格式之間進行轉換并且檢查其是否為有效的IPv6地址。例如

      INET6_ATON()和INET6_NTOA()類似于INET_ATON()和INET_NTOA(),但除了能處理IPv4地址之外還能處理IPv6地址。

      驗證操作系統是否支持IPv6

      在MySQL服務器可以接受IPv6的連接之前,服務器所在操作系統主機必須支持IPv6。例如在Linux主機上執行以下命令:

      [root@localhost ~]# ping6 ::1

      PING ::1(::1) 56 data bytes

      64 bytes from ::1: icmp_seq=1 ttl=64 time=0.100 ms

      64 bytes from ::1: icmp_seq=2 ttl=64 time=0.056 ms

      64 bytes from ::1: icmp_seq=3 ttl=64 time=0.035 ms

      64 bytes from ::1: icmp_seq=4 ttl=64 time=0.039 ms

      為了對操作系統網絡接口生成詳細的描述,執行ifconfig -a并查看輸出中的IPv6地址。

      [root@localhost ~]# ifconfig -a

      docker0: flags=4163 mtu 1500

      inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255

      inet6 fe80::42:15ff:fe1d:e05a prefixlen 64 scopeid 0x20

      ether 02:42:15:1d:e0:5a txqueuelen 0 (Ethernet)

      RX packets 15 bytes 3638 (3.5 KiB)

      RX errors 0 dropped 0 overruns 0 frame 0

      TX packets 33 bytes 3825 (3.7 KiB)

      TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

      ens160: flags=4163 mtu 1500

      inet 192.168.1.250 netmask 255.255.255.0 broadcast 192.168.1.255

      inet6 fe80::250:56ff:fea3:90e6 prefixlen 64 scopeid 0x20

      ether 00:50:56:a3:90:e6 txqueuelen 1000 (Ethernet)

      RX packets 5634313 bytes 364548809 (347.6 MiB)

      RX errors 0 dropped 0 overruns 0 frame 0

      TX packets 19054 bytes 2337541 (2.2 MiB)

      TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

      如果你的操作系統不支持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 ~]# systemctl stop mysqld

      [root@localhost ~]# systemctl start mysqld

      [root@localhost ~]# systemctl status mysqld

      mysqld.service - LSB: start and stop MySQL

      Loaded: loaded (/etc/rc.d/init.d/mysqld; bad; vendor preset: disabled)

      Active: active (running) since 二 2020-01-14 16:56:48 CST; 5s ago

      Docs: man:systemd-sysv-generator(8)

      Process: 23257 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=0/SUCCESS)

      Tasks: 28

      Memory: 168.2M

      CGroup: /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月 14 16:56:46 localhost.localdomain systemd[1]: Starting LSB: start and stop MySQL…

      1月 14 16:56:48 localhost.localdomain mysqld[23257]: Starting MySQL… SUCCESS!

      1月 14 16:56:48 localhost.localdomain systemd[1]: Started LSB: start and stop MySQL.

      另外,你也可以綁定服務器到::1,但這會使用服務器更加受限于TCP/IP連接。它只能接受單個IPv6地址的連接并且會拒絕IPv4的連接。

      2.作為管理員,連接到服務器創建一個本地用戶賬號它將使用::1本地IPv6主機地址進行連接

      mysql> create user ‘ipv6root’@’::1’ identified by “abcd”;

      Query OK, 0 rows affected (0.01 sec)

      mysql> grant select on . to ‘ipv6root’@’::1’;

      Query OK, 0 rows affected (0.02 sec)

      3.調用mysql客戶端工具使用新創建的賬號連接服務器

      [mysql@localhost mysql]$ mysql -h ::1 -uipv6root -pabcd mysql

      mysql: [Warning] Using a password on the command line interface can be insecure.

      Reading table information for completion of table and column names

      You can turn off this feature to get a quicker startup with -A

      Welcome to the MySQL monitor. Commands end with ; or \g.

      Your MySQL connection id is 7

      Server version: 5.7.26-log Source distribution

      Copyright ? 2000, 2019, Oracle and/or its affiliates. All rights reserved.

      Oracle is a registered trademark of Oracle Corporation and/or its

      affiliates. Other names may be trademarks of their respective

      owners.

      Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

      mysql> select host,user from user;

      ±----------±--------------+

      | host | user |

      ±----------±--------------+

      | % | csroot |

      | % | root |

      | ::1 | ipv6root |

      | localhost | mysql.session |

      | localhost | mysql.sys |

      ±----------±--------------+

      5 rows in set (0.00 sec)

      4.執行status命令來顯示連接信息

      mysql> status

      mysql Ver 14.14 Distrib 5.7.26, for Linux (x86_64) using EditLine wrapper

      Connection id: 7

      Current database: mysql

      Current user: ipv6root@localhost

      SSL: Cipher in use is DHE-RSA-AES256-SHA

      Current pager: stdout

      Using outfile: ‘’

      Using delimiter: ;

      Server version: 5.7.26-log Source distribution

      Protocol version: 10

      Connection: ::1 via TCP/IP

      Server characterset: utf8mb4

      Db characterset: utf8mb4

      Client characterset: gb2312

      Conn. characterset: gb2312

      TCP port: 3306

      Uptime: 11 min 47 sec

      Threads: 1 Questions: 263 Slow queries: 0 Opens: 336 Flush tables: 1 Open tables: 329 Queries per second avg: 0.371

      mysql> SELECT CURRENT_USER(), @@bind_address;

      ±---------------±---------------+

      | CURRENT_USER() | @@bind_address |

      ±---------------±---------------+

      | ipv6root@::1 | * |

      ±---------------±---------------+

      1 row in set (0.00 sec)

      使用IPv6非本地主機地址連接MySQL服務器

      下面將介紹如何配置MySQL服務器允許遠程主機通過IPv6來連接MySQL服務器。這類似于在本地主機使用IPv6連接MySQL服務器一樣,但服務器與客戶端在不同的主機上,每臺主機有不同的IPv6地址。

      服務器主機的IPv6地址為2018::1

      [root@shard1 network-scripts]# ifconfig -a

      ens160: flags=4163 mtu 1500

      inet6 2018::1 prefixlen 64 scopeid 0x0

      ether 00:50:56:a0:51:0c txqueuelen 1000 (Ethernet)

      RX packets 27089788 bytes 2770300693 (2.5 GiB)

      RX errors 0 dropped 6 overruns 0 frame 0

      TX packets 6720001 bytes 532979878 (508.2 MiB)

      TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

      客戶端主機的IPv6地址為2018::2

      ens160: flags=4163 mtu 1500

      inet6 2018::2 prefixlen 64 scopeid 0x0

      ether 00:50:56:a0:4e:69 txqueuelen 1000 (Ethernet)

      RX packets 25337245 bytes 1913014541 (1.7 GiB)

      RX errors 0 dropped 127 overruns 0 frame 0

      TX packets 1536650 bytes 166036937 (158.3 MiB)

      TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

      具體操作如下:

      1.在啟動MySQL服務器時使用合適的–bind-address選項來允許服務器接受IPv6連接。例如,在my.cnf選項文件中設置bind-address并重啟服務器

      [mysqld]

      bind-address=*

      [root@localhost ~]# systemctl stop mysqld

      [root@localhost ~]# systemctl start mysqld

      [root@localhost ~]# systemctl status mysqld

      mysqld.service - LSB: start and stop MySQL

      Loaded: loaded (/etc/rc.d/init.d/mysqld; bad; vendor preset: disabled)

      Active: active (running) since 二 2020-01-14 16:56:48 CST; 5s ago

      Docs: man:systemd-sysv-generator(8)

      Process: 23257 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=0/SUCCESS)

      Tasks: 28

      Memory: 168.2M

      CGroup: /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月 14 16:56:46 localhost.localdomain systemd[1]: Starting LSB: start and stop MySQL…

      1月 14 16:56:48 localhost.localdomain mysqld[23257]: Starting MySQL… SUCCESS!

      1月 14 16:56:48 localhost.localdomain systemd[1]: Started LSB: start and stop MySQL.

      另外,可以綁定服務器到2018:db1:0:f01::1,但這會使用服務器更加受限于TCP/IP連接。它只能接受單個IPv6地址的連接并且會拒絕IPv4的連接。

      2.在服務器中(2018::1)創建一個賬號將從客戶端主機(2018::2)上連接服務器

      mysql> create user ‘csroot’@’%’ identified by “123456”;

      Query OK, 0 rows affected (0.01 sec)

      mysql> GRANT ALL PRIVILEGES ON . TO ‘csroot’@’%’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;

      Query OK, 0 rows affected (0.00 sec)

      3.在客戶端主機上(2018::2),調用mysql客戶端使用創建的新賬號來連接服務器(我這時使用MariaDB作為客戶端工具)

      -bash-4.2$ mysql -h 2018::1 -ucsroot -p123456 mysql

      Reading table information for completion of table and column names

      You can turn off this feature to get a quicker startup with -A

      Welcome to the MariaDB monitor. Commands end with ; or \g.

      Your MySQL connection id is 6

      Server version: 5.6.23 MySQL Community Server (GPL)

      Copyright ? 2000, 2018, Oracle, MariaDB Corporation Ab and others.

      Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

      MySQL [mysql]>

      4.執行status命令來顯示連接信息

      MySQL [mysql]> status

      mysql Ver 15.1 Distrib 10.0.38-MariaDB, for Linux (x86_64) using readline 5.1

      Connection id: 6

      Current database: mysql

      Current user: csroot@2018::2

      SSL: Not in use

      Current pager: stdout

      Using outfile: ‘’

      Using delimiter: ;

      Server: MySQL

      Server version: 5.6.23 MySQL Community Server (GPL)

      Protocol version: 10

      Connection: 2018::1 via TCP/IP

      Server characterset: latin1

      Db characterset: latin1

      Client characterset: gb2312

      Conn. characterset: gb2312

      TCP port: 3306

      Uptime: 34 days 50 min 24 sec

      Threads: 2 Questions: 175 Slow queries: 0 Opens: 87 Flush tables: 1 Open tables: 80 Queries per second avg: 0.000

      MySQL [mysql]> select current_user(),@@bind_address;

      ±---------------±---------------+

      | current_user() | @@bind_address |

      ±---------------±---------------+

      | csroot@% | * |

      ±---------------±---------------+

      1 row in set (0.00 sec)

      IPv6 MySQL

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:在線預約表單標題怎么寫(預約表單制作
      下一篇:怎么刪除分頁符的空白頁(有分頁符的空白頁如何刪除)
      相關文章
      永久亚洲成a人片777777| 亚洲午夜无码久久| 亚洲6080yy久久无码产自国产 | 亚洲男人第一无码aⅴ网站| 亚洲中文无码线在线观看| 亚洲国产综合自在线另类| 亚洲日韩国产精品无码av| 亚洲人成亚洲精品| 久久水蜜桃亚洲av无码精品麻豆| 亚洲AV无码专区国产乱码电影| 久久亚洲国产伦理| 亚洲精品在线观看视频| 亚洲无线电影官网| 亚洲网站在线免费观看| 亚洲国产美女精品久久| 激情五月亚洲色图| 亚洲 欧洲 视频 伦小说| 亚洲人成电影网站色| 久久亚洲AV成人无码国产最大| 精品亚洲国产成人av| 午夜亚洲av永久无码精品| 亚洲精品国产高清嫩草影院| 久久亚洲精品无码播放| 国产亚洲一区二区精品| 亚洲精品综合一二三区在线| 久久精品国产亚洲77777| 亚洲日韩中文字幕天堂不卡| 国产成人亚洲精品| 亚洲avav天堂av在线网毛片| 亚洲国产精品无码久久九九| 国产AV无码专区亚洲AWWW| 亚洲s色大片在线观看| 久久亚洲国产精品成人AV秋霞| 亚洲国产综合自在线另类| 亚洲人成电影网站色| 亚洲精品成人区在线观看| 亚洲精品蜜桃久久久久久| 2022年亚洲午夜一区二区福利| 亚洲91精品麻豆国产系列在线| 亚洲av无码专区在线观看下载| 久久精品国产亚洲AV不卡|