10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

MySQL 8.0参考手册/.../ 通过DNS SRV记录连接服务器

4.2.6通过DNS SRV记录连接服务器

在DNS (Domain Name System)中,SRV记录(服务位置记录)是一种资源记录,它使客户端能够指定一个表示服务、协议和域的名称。对名称的DNS查找将返回一个应答,其中包含域中提供所需服务的多个可用服务器的名称。有关DNS SRV的信息,包括记录如何定义列出的服务器的优先级顺序,请参见RFC 2782

MySQL支持使用DNS SRV记录连接到服务器。接收到DNS SRV查找结果的客户端根据DNS管理员分配给每台主机的优先级和权重,按照优先级顺序尝试连接到每台列出的主机上的MySQL服务器。只有当客户端无法连接到任何服务器时,才会发生连接失败。

当多个MySQL实例(例如一个服务器集群)为您的应用程序提供相同的服务时,DNS SRV记录可以用于协助故障转移、负载平衡和复制服务。应用程序直接管理连接尝试的候选服务器集是非常麻烦的,DNS SRV记录提供了一种替代方案:

  • DNS SRV记录使DNS管理员可以将一个DNS域映射到多个服务器。DNS SRV记录也可以在服务器从配置中添加或删除或主机名更改时由管理员集中更新。

  • DNS SRV记录的集中管理消除了单个客户端在连接请求中识别每个可能的主机的需要,或连接由附加的软件组件处理的需要。应用程序可以使用DNS SRV记录来获取关于候选MySQL服务器的信息,而不是管理服务器本身的信息。

  • DNS SRV记录可以与连接池结合使用,在这种情况下,到当前DNS SRV记录列表中不再存在的主机的连接将在它们空闲时从池中删除。

MySQL支持使用DNS SRV记录在以下情况下连接到服务器:

DNS SRV名称由服务、协议和域组成,服务和协议的前缀均为下划线:

_服务._协议

下面的DNS SRV记录标识了多个候选服务器,例如客户端可能使用这些服务器建立X协议连接:

名称TTL类优先级权重端口目标器86400 IN SRV 0 5 33060 server1.example.com。_mysqlx._tcp.example.com。86400 IN SRV 0 10 33060 server2.example.com。_mysqlx._tcp.example.com。86400 IN SRV 10 5 33060 server3.example.com。_mysqlx._tcp.example.com。86400 IN SRV 20 5 33060 server4.example.com。

在这里,mysqlx表示X协议服务和tcp表示TCP协议。客户端可以使用名称请求此DNS SRV记录_mysqlx._tcp.example.com.在连接请求中指定名称的特定语法取决于客户机的类型。例如,客户机可能支持在类似uri的连接字符串中指定名称或作为键-值对指定名称。

经典协议连接的DNS SRV记录可能是这样的:

名称TTL分类优先级权重端口目标器86400 IN SRV 0 5 3306 server1.example.com。_mysql._tcp.example.com。86400 IN SRV 0 10 3306 server2.example.com。_mysql._tcp.example.com。86400 IN SRV 10 5 3306 server3.example.com。_mysql._tcp.example.com。86400 IN SRV 20 5 3306 server4.example.com。

在这里,这个名字mysql指定经典MySQL协议服务,端口是3306(经典MySQL协议的默认端口)而不是33060 (X协议的默认端口)。

当使用DNS SRV记录查找时,客户端通常必须对连接请求应用以下规则(可能存在客户端或连接器特定的异常):

  • 请求必须指定完整的DNS SRV记录名称,服务和协议名称以下划线作为前缀。

  • 请求不能指定多个主机名。

  • 请求不能指定端口号。

  • 只支持TCP连接。不能使用Unix套接字文件、Windows命名管道和共享内存。

有关在X DevAPI中使用基于DNS SRV的连接的更多信息,请参见通过DNS SRV记录的连接