文档首页
X DevAPI 用户指南
下载本手册
PDF (US Ltr) - 1.4Mb
PDF (A4) - 1.4Mb


X DevAPI 用户指南  /  ...  /  使用 DNS SRV 记录连接

2.2.4 使用 DNS SRV 记录连接

X DevAPI 支持使用 DNS SRV 记录连接到 MySQL 服务器。接收 DNS SRV 查找结果的客户端会尝试按照 DNS 管理员为每个主机分配的优先级和权重顺序,依次连接到列表中的每个 MySQL 服务器。只有当客户端无法连接到任何服务器时,才会发生连接失败。本节重点介绍 X DevAPI 应用程序中 DNS SRV 的使用。有关 MySQL 中 DNS SRV 支持的一般信息,请参阅 使用 DNS SRV 记录连接到服务器

实现 X DevAPI 的 MySQL 连接器可以通过将 mysqlx+srv 指定为 URI 类连接字符串的方案元素,并使用 DNS SRV 名称来请求 DNS SRV 记录查找。例如

mysqlx+srv://_mysqlx._tcp.example.com/db?options

DNS SRV 名称由服务、协议和域组成,服务和协议前缀都带有一个下划线。在此示例中,mysqlx 表示 X 协议服务,tcp 表示 TCP 协议。

X DevAPI 的 mysqlx.getSession() 方法和用于连接池的 mysqlx.getClient() 方法使用此协议方案扩展验证连接信息,并将生成的 DNS SRV 记录处理为主机列表,以用于故障转移行为和连接池。DNS SRV 记录中指定的优先级和权重将得到尊重。

MySQL 连接器还具有连接器特定的选项,用于请求对 X 协议连接和经典 MySQL 协议连接进行 DNS SRV 记录查找。有关详细信息,请参阅各个 MySQL 连接器的文档。

注意

MySQL Shell 目前不支持 DNS SRV 记录。

当使用 DNS SRV 记录查找时,客户端通常必须对连接请求应用以下规则(可能存在连接器特定的例外情况)

  • 请求必须指定完整的 DNS SRV 记录名称,服务和协议名称前缀带有一个下划线。例如,此 DNS SRV 记录与通过 TCP 实现的 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.

    客户端可以使用以下语法指定该 DNS SRV 记录

    var client = mysqlx.getClient("mysqlx+srv://_mysqlx._tcp.example.com")
  • 请求不得指定多个主机名。

  • 请求不得指定端口号。

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

Java 代码

Session mySession = new 
SessionFactory().getSession("mysqlx+srv://user:password@_mysql._tcp.example.com/db");

Node.js JavaScript 代码

mysqlx.getSession({ host: '_mysqlx._tcp.example.com', resolveSrv: true })

C# 代码

var session = MySQLX.GetSession("mysqlx+srv://user:password@_mysqlx._tcp.example.com.");

使用 X DevAPI for C 的 Connector/C++ 代码

mysqlx::Session sess(
    SessionOption::HOST, "_mysqlx._tcp.example.com",
    SessionOption::DNS_SRV, true,
    SessionOption::USER, "user",
    SessionOption::PWD, "password");

Python 代码

session = mysqlx.get_session(host="tcp.example.com", dns_srv=True)