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 DevAPImysqlx.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 的连接器/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)