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名称由服务、协议和领域组成,服务和协议都以下划线为前缀:

sql 复制代码
_service._protocol.domain

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

sql 复制代码
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记录可能如下所示:

sql 复制代码
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命名管道和共享内存。

相关推荐
cui_ruicheng7 小时前
MySQL(四):数据类型与字段设计
数据库·mysql
DIY源码阁10 小时前
JavaSwing航班订票管理系统 - MySQL版
数据库·mysql
流星白龙12 小时前
【MySQL高阶】26.事务(1)
数据库·mysql
这个DBA有点耶13 小时前
索引优化深潜(下):索引合并、ICP 与索引设计的实战法则
数据库·mysql·架构
用户30745969820714 小时前
EXPLAIN 执行计划 完全精通指南
mysql
AI行业学习15 小时前
CC-Switch v3.16.1 官方下载 | 安装配置详细教程【2026.6.10】
java·开发语言·vue.js·python·mysql·eclipse·html
用户30745969820716 小时前
乐观锁与悲观锁
mysql
AOwhisky16 小时前
学习自测与解析:MySQL第五、六、七期核心知识点详解
运维·数据库·笔记·学习·mysql·云计算
梦想的旅途218 小时前
企业微信外部群主动调用:RPA 接口与官方 API 的技术边界
网络·mysql·自动化·企业微信·rpa
ULIi096kr19 小时前
MySQL查看表创建时间、修改时间、最后更新时间(精准排查僵尸表)
数据库·mysql