在域名系统(DNS)中,SRV记录(服务位置记录)是一种资源记录,使客户端可以指定表示服务,协议和域的名称。名称上的DNS查找将返回一个答复,其中包含域中提供所需服务的多个可用服务器的名称。有关DNS SRV的信息,包括记录如何定义列出的服务器的优先顺序,请参阅 RFC 2782。
MySQL支持使用DNS SRV记录连接服务器。根据DNS管理员分配给每个主机的优先级和权重,收到DNS SRV查找结果的客户端会尝试按优先顺序连接到列出的每个主机上的MySQL服务器。仅当客户端无法连接到任何服务器时,连接失败才会发生。
当多个MySQL实例(例如服务器集群)为您的应用程序提供相同的服务时,DNS SRV记录可用于协助故障转移,负载平衡和复制服务。对于应用程序来说,直接管理用于连接尝试的候选服务器集非常麻烦,并且DNS SRV记录提供了一种替代方案:
- DNS SRV记录使DNS管理员可以将单个DNS域映射到多个服务器。添加或从配置中删除服务器或更改其主机名时,管理员还可以集中更新DNS SRV记录。
- DNS SRV记录的集中管理消除了单个客户端识别连接请求中每个可能的主机或由附加软件组件处理连接的需求。应用程序可以使用DNS SRV记录获取有关候选MySQL服务器的信息,而不是管理服务器信息本身。
- DNS SRV记录可与连接池结合使用,在这种情况下,当空闲时,将从池中删除不再位于当前DNS SRV记录列表中的主机的连接。
MySQL支持在以下情况下使用DNS SRV记录连接到服务器:
- 一些MySQL连接器实现了DNS SRV支持。特定于连接器的选项允许针对X协议连接和经典MySQL协议连接请求DNS SRV记录查找。有关一般信息,请参阅 使用DNS SRV记录进行连接。有关详细信息,请参见各个MySQL连接器的文档。
- C API提供的
mysql_real_connect_dns_srv()功能类似于mysql_real_connect(),不同之处在于参数列表未指定要连接的MySQL服务器的特定主机。而是,它为指定一组服务器的DNS SRV记录命名。参见 mysql_real_connect_dns_srv()。 - 在MySQL的客户端有一个
--dns-srv-name选项,以指示指定一组服务器的DNS SRV记录。请参见第4.5.1节“ mysql -MySQL命令行客户端”。
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协议。客户端可以使用名称请求此DNS SRV记录 _mysqlx._tcp.example.com。在连接请求中指定名称的特定语法取决于客户端的类型。例如,客户端可能支持在类似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记录的连接。




