文档首页
MySQL 9.0 C API 开发人员指南
下载此手册
PDF (US Ltr) - 1.4Mb
PDF (A4) - 1.4Mb


MySQL 9.0 C API 开发人员指南  /  ...  /  mysql_real_connect_dns_srv()

5.4.59 mysql_real_connect_dns_srv()

MYSQL *
mysql_real_connect_dns_srv(MYSQL *mysql,
                           const char *dns_srv_name,
                           const char *user,
                           const char *passwd,
                           const char *db,
                           unsigned long client_flag)

描述

注意

mysql_real_connect_dns_srv() 是一个同步函数。与 mysql_real_connect() 不同,它没有异步对应函数。

mysql_real_connect_dns_srv()mysql_real_connect() 类似,不同之处在于参数列表没有指定要连接的 MySQL 服务器的特定主机。相反,它指定了一个 DNS SRV 记录,该记录指定了一组服务器。有关 MySQL 中 DNS SRV 支持的信息,请参见 使用 DNS SRV 记录连接到服务器.

用于 mysql_real_connect_dns_srv()dns_srv_name 参数取代了 mysql_real_connect()hostportunix_socket 参数。dns_srv_name 参数指定了一个 DNS SRV 记录,该记录确定用于建立与 MySQL 服务器连接的候选主机。

传递给 mysql_real_connect_dns_srv()mysqluserpasswddbclient_flag 参数与 mysql_real_connect() 的含义相同。有关其含义的描述,请参见 第 5.4.58 节,“mysql_real_connect()”.

假设 DNS 为 example.com 域配置了以下 SRV 信息

Name                     TTL   Class   Priority Weight Port Target
_mysql._tcp.example.com. 86400 IN SRV  0        5      3306 host1.example.com
_mysql._tcp.example.com. 86400 IN SRV  0        10     3306 host2.example.com
_mysql._tcp.example.com. 86400 IN SRV  10       5      3306 host3.example.com
_mysql._tcp.example.com. 86400 IN SRV  20       5      3306 host4.example.com

要使用该 DNS SRV 记录,将 "_mysql._tcp.example.com" 作为 dns_srv_name 参数传递给 mysql_real_connect_dns_srv(),该函数随后尝试连接到组中的每个服务器,直到建立成功的连接。只有当无法建立与任何服务器的连接时才会发生连接失败。DNS SRV 记录中的优先级和权重值决定了应尝试服务器的顺序。

mysql_real_connect_dns_srv() 仅尝试建立 TCP 连接。

客户端库对 mysql_real_connect_dns_srv() 的每次调用执行 DNS SRV 查找。客户端库不缓存查找结果。

返回值

如果连接成功,则为 MYSQL* 连接句柄;如果连接不成功,则为 NULL。对于成功的连接,返回值与第一个参数的值相同。

错误

与您从 mysql_real_connect() 中获取的错误相同,此外还有

示例

以下示例使用先前显示的 DNS SRV 记录的名称作为建立连接的候选服务器的来源。

MYSQL mysql;
const char *dns_srv_name = "_mysql._tcp.example.com";

mysql_init(&mysql);
if (!mysql_real_connect_dns_srv(&mysql,dns_srv_name,"user","passwd","database",0))
{
    fprintf(stderr, "Failed to connect to database: Error: %s\n",
          mysql_error(&mysql));
}