通过IPv6连接数据库的方法

本文总结了配置和验证MySQL数据库支持IPV6的方法,并扩展使用jdbc连接其他主流数据库url的方法,包括ipv4及ipv6两种连接格式。
ping6 -I eth0 ipv6

  1. 验证操作系统是否支持ipv6

    • 本机测试:ping6 ::1//ifconfig
      [root@XXX-ipv6 ~]# ping6 ::1
      PING ::1(::1) 56 data bytes
      64 bytes from ::1: icmp_seq=1 ttl=64 time=0.021 ms
      64 bytes from ::1: icmp_seq=2 ttl=64 time=0.039 ms
      64 bytes from ::1: icmp_seq=3 ttl=64 time=0.037 ms
      ^C
      --- ::1 ping statistics ---
      3 packets transmitted, 3 received, 0% packet loss, time 1999ms
      rtt min/avg/max/mdev = 0.021/0.032/0.039/0.009 ms
      
      [root@XXX-ipv6 ~]# ifconfig
      eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
              inet 10.0.0.3  netmask 255.255.240.0  broadcast 10.0.15.255
              inet6 2402:db40:5f00:3200:b366:ff34:e0e6:f28  prefixlen 128  scopeid 0x0<global>
              inet6 fe80::d662:97b7:3976:db84  prefixlen 64  scopeid 0x20<link>
              ether fa:16:3e:1b:6f:bd  txqueuelen 1000  (Ethernet)
              RX packets 3143399  bytes 1013069846 (966.1 MiB)
              RX errors 0  dropped 0  overruns 0  frame 0
              TX packets 4288824  bytes 1472280674 (1.3 GiB)
              TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
      lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
              inet 127.0.0.1  netmask 255.0.0.0
              inet6 ::1  prefixlen 128  scopeid 0x10<host>
              loop  txqueuelen 1000  (Local Loopback)
              RX packets 705  bytes 81478 (79.5 KiB)
              RX errors 0  dropped 0  overruns 0  frame 0
              TX packets 705  bytes 81478 (79.5 KiB)
              TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
      
    • 远程测试:ping6 -I eth0 ipv6
      [root@dbaudit-linux ~]# ping6 -I eth0 2402:db40:5f00:3200:b366:ff34:e0e6:f28
      PING 2402:db40:5f00:3200:b366:ff34:e0e6:f28(2402:db40:5f00:3200:b366:ff34:e0e6:f28) from 2402:db40:5f00:3200:3046:d107:8c70:6342 eth0: 56 data bytes
      64 bytes from 2402:db40:5f00:3200:b366:ff34:e0e6:f28: icmp_seq=1 ttl=64 time=0.242 ms
      64 bytes from 2402:db40:5f00:3200:b366:ff34:e0e6:f28: icmp_seq=2 ttl=64 time=0.154 ms
      ^C
      --- 2402:db40:5f00:3200:b366:ff34:e0e6:f28 ping statistics ---
      2 packets transmitted, 2 received, 0% packet loss, time 1000ms
      rtt min/avg/max/mdev = 0.154/0.198/0.242/0.044 ms
      
  2. MySQL支持IPV6连接配置

    • bind-address配置

      修改my.cnf配置文件,在[mysqld]选项下增加bind-address = ::配置,把bind-address配置成::可以保证同时支持IPv4和IPv6的TCP/IP的连接。

      [mysqld]
      bind-address = ::
      

      重启mysql使配置生效:

      /etc/init.d/mysqld restart
      
    • 创建登陆用户

      使用ipv4先登陆mysql,执行命令:

      CREATE USER 'root'@'::1' IDENTIFIED BY '123456';
      
    • 给root用户增加执行权限
      GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
      
    • 本地连接MySQL
      mysql -h ::1 -uroot -p
      

      在这里插入图片描述

    • 远程连接MySQL
       mysql -h 2402:db40:5f00:3200:b366:ff34:e0e6:f28 -P3306 -uroot -p
      

      在这里插入图片描述

    • netstat查看3306端口
      netstat -ano|grep 3306
      

      在这里插入图片描述
      127.0.0.1:3306 表示监听端口绑定IPv4,只支持IPv4地址连接
      :::3306 表示监听端口绑定IPv4和IPv6,支持IPv4和IPv6地址连接
      在这里插入图片描述

  3. 使用jdbc连接数据库的url

    总结几个常用数据库连接ipv6地址的连接字符串

    • 连接MySQL

      语法格式:address=(key=value)

      // IPv4连接URL
      String jdbcIpv4Url_1 = "jdbc:mysql://IP:port/dbName";  
      String jdbcIpv4Url_2 = "jdbc:mysql://address=(protocol=tcp)(host=10.43.159.11)(port=3306)/dbName";  
      // 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://hostname:3306/dbName";  
      String hostNmaeUrl_2 = "jdbc:mysql://address=(protocol=tcp)(host="hostname")(port=3306)/dbName";  
      

      MySQL Connector 5.1和8.0版本的区别
      使用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
      
    • 连接sqlserver

      1)使用com.microsoft.sqlserver.jdbc.SQLServerDriver驱动情况

      String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
      //设置连接属性
      Properties pro = new Properties();
      pro.setProperty("serverName", serverIP);
      pro.setProperty("portNumber", serverPort);
      pro.setProperty("databaseName", serverBase);
      pro.setProperty("user", username);
      pro.setProperty("password", password); 
      String url = "jdbc:sqlserver://;";
      Connection conn = DriverManager.getConnection(url,pro);
      

      2)使用net.sourceforge.jtds.jdbc.Driver驱动的情况

      <!-- maven 依赖-->
      <dependency>
          <groupId>net.sourceforge.jtds</groupId>
          <artifactId>jtds</artifactId>
          <version>1.3.1</version>
      </dependency>
      //设置驱动
      String driver = "net.sourceforge.jtds.jdbc.Driver";
      //连接字符串
      String url = "jdbc:jtds:sqlserver:// [serverIP]:serverPort  ;DatabaseName= serverBase;user=username;password=password;
      
    • 连接Oracle
      String ipv6url = "jdbc:oracle:thin:@[serverIP]:serverPort:serverBase;
      
    • 连接mongodb
      MongoClientURI connectionString = new MongoClientURI("mongodb://[serverIp]:serverPort”);
      MongoClientURI client = new MongoClient(connectionString);
      

猜你喜欢

转载自blog.csdn.net/ccccsy99/article/details/107570238