当前位置: 首页 > article >正文

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命名管道和共享内存。


http://www.kler.cn/a/509658.html

相关文章:

  • QT 使用QTableView读取数据库数据,表格分页,跳转,导出,过滤功能
  • 【Python】随机数种子(random seed)的设置
  • 用公网服务器实现内网穿透
  • 02.02、返回倒数第 k 个节点
  • 嵌入式杂谈——什么是DMA?有什么用?
  • Kubernetes(k8s)和Docker Compose本质区别
  • SAP租赁资产解决方案【物业、地产、酒店、汽车租赁行业】
  • GCC支持Objective C的故事?Objective-C?GCC只能编译C语言吗?Objective-C 1.0和2.0有什么区别?
  • PenGymy论文阅读
  • 网络安全(二):加密与认证技术
  • SpringMVC 实战指南:文件上传
  • Java多线程编程:深入理解线程生命周期
  • 1.11 思维树(Tree-of-Thoughts, ToT):续写佳话
  • RK3588平台开发系列讲解(NPU篇)NPU 驱动的组成
  • 时序自适应卷积 (Temporally-Adaptive Convolutions, TAdaConv)详解及代码复现
  • shell-特殊位置变量
  • 关于vite+vue3+ts项目中env.d.ts 文件详解
  • CSRF攻击XSS攻击
  • 基于 HTML5 Canvas 制作一个精美的 2048 小游戏--day2
  • 【Flink系列】2. Flink快速上手
  • 中软高科鸿蒙Next身份证读卡SDK集成说明
  • BIO、NIO、AIO
  • FANUC机器人系统镜像备份与恢复的具体步骤(图文)
  • PCL 生成空间圆点云【2025最新版】
  • QT笔记- Qt6.8.1安卓开发配置
  • Linux C/C++编程-文件的读取与写入示例