文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  使用 DNS SRV 记录连接到服务器

6.2.6 使用 DNS SRV 记录连接到服务器

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

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

当多个 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 名称由服务、协议和域组成,服务和协议都以一个下划线开头。

_service._protocol.domain

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

Name                      TTL   Class  Priority Weight Port  Target
_mysqlx._tcp.example.com. 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 协议。客户端可以使用名称 _mysqlx._tcp.example.com 请求此 DNS SRV 记录。在连接请求中指定名称的特定语法取决于客户端的类型。例如,客户端可能支持在类似 URI 的连接字符串中或作为键值对指定名称。

经典协议连接的 DNS SRV 记录可能如下所示:

Name                     TTL   Class  Priority Weight  Port Target
_mysql._tcp.example.com. 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 记录连接