欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > MySQL程序之:使用DNS SRV记录连接到服务器

MySQL程序之:使用DNS SRV记录连接到服务器

2025/1/19 17:41:28 来源:https://blog.csdn.net/zhuguoli200851/article/details/145197056  浏览:    关键词:MySQL程序之:使用DNS SRV记录连接到服务器

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

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

当多个MySQL实例(如服务器集群)为您的应用程序提供相同的服务时,域名系统SRV记录可用于协助故障转移/切主、负载均衡和复制服务。应用程序直接管理连接尝试的候选服务器集很麻烦,域名系统SRV记录提供了另一种选择:

  • 域名系统SRV记录使域名系统管理员能够将单个域名系统领域映射到多个服务器。当服务器从配置中添加或删除或更改主机名时,管理员也可以集中更新域名系统SRV记录。

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

  • 域名系统SRV记录可以与连池组合使用,在这种情况下,不再在当前域名系统SRV记录列表中的主机连接将在空闲时从池中删除。

MySQL支持在以下情况下使用域名系统SRV记录连接服务器:

  • 一些MySQL连接器实现了DNS SRV支持;特定于连接器的选项允许为X协议连接和经典MySQL协议连接请求DNS SRV记录查找。有关一般信息,请参阅使用DNS SRV记录的连接。有关详细信息,请参阅单个MySQL连接器的留档。
  • C API提供了一个类似于mysql_real_connect()的mysql_real_connect_dns_srv()函数,只是参数列表没有指定要连接的MySQL服务器的特定主机。相反,它命名了一个指定一组服务器的DNS SRV记录。参见mysql_real_connect_dns_srv()。
  • mysql客户端有一个--dns-srv-name选项来指示指定一组服务器的域名系统SRV记录。请参阅“mysql-MySQL命令行客户端”。

域名系统SRV名称由服务、协议和领域组成,服务和协议都以下划线为前缀:

_service._protocol.domain

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

经典协议连接的域名系统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协议端口)。

当使用域名系统SRV记录查找时,客户端通常必须对连接请求应用这些规则(可能存在特定于客户端或连接器的例外):

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

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

  • 请求不得指定端口号。

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com