自 8.0.19 版以来,Connector/J 支持使用 DNS SRV 记录进行连接。有关 MySQL 中 DNS SRV 支持的信息,请参阅使用 DNS SRV 记录连接到服务器。
当多个 MySQL 实例为您的应用程序提供相同的服务时,DNS SRV 记录可用于提供故障转移、负载平衡和复制服务。它们消除了客户端识别连接字符串中每个可能的主机或连接由附加软件组件处理的需要。以下是 Connector/J 对 DNS SRV 记录的支持的摘要:
-
连接 URL 中的这些新模式启用 DNS SRV 记录支持:
jdbc:mysql+srv:
对于使用 DNS SRV 记录的普通和基本故障转移 JDBC 连接。jdbc:mysql+srv:loadbalance:
用于使用 DNS SRV 记录的负载平衡 JDBC 连接。jdbc:mysql+srv:replication:
对于使用 DNS SRV 记录的复制 JDBC 连接。mysqlx+srv:
对于使用 DNS SRV 记录的 X DevAPI 连接。
-
除了在连接 URL 中使用新模式外,还可以使用两个新连接属性启用或禁用 DNS SRV 记录支持
dnsSrv
,xdevapi.dns-srv
分别用于 JDBC 和 X DevAPI 连接。例如,此连接 URL 启用 DNS SRV 记录支持:mysqlx://johndoe:secret@_mysql._tcp.mycompany.local/db?xdevapi.dns-srv=true
但是,使用 DNS SRV 架构并将 DNS SRV 连接属性设置为
false
会导致错误;例如:mysqlx+srv://johndoe:secret@_mysql._tcp.mycompany.local/db?xdevapi.dns-srv=false # The connection URL causes Connector/J to throw an error
以下是 Connector/J 对 DNS SRV 记录支持的一些要求和限制:
如果在 DNS SRV 连接的连接 URL 中指定了多个主机,则 Connector/J 会抛出异常(复制设置除外,使用创建
jdbc:mysql+srv:replication
,它只需要指定一个源服务器和一个副本服务器)。如果在 DNS SRV 连接的连接 URL 中指定了端口号,Connector/J 将引发异常。
仅 TCP/IP 连接支持 DNS SRV 记录。如果您尝试启用 DNS SRV 记录支持 Windows 命名管道连接,Connector/J 将抛出异常。
负载平衡和故障转移的 DNS SRV 记录支持。
对于负载平衡和故障转移连接,Connector/J 使用priority
DNS SRV 记录字段来决定主机连接尝试的优先级。
连接池的 DNS SRV 记录支持。 在 X DevAPI 连接池设置中,Connector/J 定期重新查询 DNS SRV 记录,并优雅地逐步淘汰其主机不再出现在记录中的所有连接,并在其主机重新出现在记录中时将连接重新接纳到池中。
查找 DNS SRV 记录。 用户有责任提供完整的服务主机名;Connector/J 不附加任何前缀也不验证主机名结构。以下是有效服务主机名模式的示例:
foo.domain.local
_mysql._tcp.foo.domain.local
_mysqlx._tcp.foo.domain.local
_readonly._tcp.foo.domain.local
_readwrite._tcp.foo.domain.local
有关详细信息,请参阅X DevAPI 用户指南中的使用 DNS SRV 记录的连接。