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()
的 host
、port
和 unix_socket
引數。dns_srv_name
引數命名一個 DNS SRV 記錄,該記錄決定用於建立與 MySQL 伺服器連線的候選主機。
mysql_real_connect_dns_srv()
的 mysql
、user
、passwd
、db
和 client_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"
作為 mysql_real_connect_dns_srv()
的 dns_srv_name
引數傳遞,然後它會嘗試與群組中的每個伺服器建立連線,直到成功建立連線。只有在無法與任何伺服器建立連線時,才會發生連線失敗。DNS SRV 記錄中的優先順序和權重值決定了應嘗試伺服器的順序。
mysql_real_connect_dns_srv()
只嘗試建立 TCP 連線。
客戶端程式庫會對每次呼叫 mysql_real_connect_dns_srv()
執行 DNS SRV 查詢。客戶端程式庫不會快取查詢結果。
以下範例使用先前顯示的 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));
}