在網域名稱系統 (DNS) 中,SRV 記錄(服務位置記錄)是一種資源記錄類型,可讓用戶端指定一個名稱,該名稱指示服務、協定和網域。對名稱進行 DNS 查找會傳回一個回覆,其中包含網域中提供所需服務的多個可用伺服器名稱。有關 DNS SRV 的資訊,包括記錄如何定義所列伺服器的偏好順序,請參閱 RFC 2782。
MySQL 支援使用 DNS SRV 記錄連線至伺服器。接收到 DNS SRV 查找結果的用戶端會嘗試依優先順序連線至所列主機上的 MySQL 伺服器,該優先順序是根據 DNS 管理員指派給每個主機的優先順序和權重而定。只有當用戶端無法連線至任何伺服器時,才會發生連線失敗。
當多個 MySQL 執行個體(例如伺服器叢集)為您的應用程式提供相同的服務時,可以使用 DNS SRV 記錄來協助故障轉移、負載平衡和複製服務。應用程式直接管理連線嘗試的候選伺服器集是繁瑣的,而 DNS SRV 記錄提供了替代方案。
DNS SRV 記錄可讓 DNS 管理員將單一 DNS 網域對應至多個伺服器。當伺服器加入或從組態中移除,或其主機名稱變更時,管理員也可以集中更新 DNS SRV 記錄。
集中管理 DNS SRV 記錄消除了個別用戶端在連線請求中識別每個可能主機的需求,或讓額外的軟體元件處理連線的需求。應用程式可以使用 DNS SRV 記錄來取得有關候選 MySQL 伺服器的資訊,而不是自行管理伺服器資訊。
DNS SRV 記錄可以與連線池結合使用,在這種情況下,當閒置時,將從集區中移除連線至目前 DNS SRV 記錄清單中已不存在的主機的連線。
MySQL 支援在這些情況下使用 DNS SRV 記錄連線至伺服器
多個 MySQL 連接器實作 DNS SRV 支援;特定於連接器的選項可讓您請求 X Protocol 連線和傳統 MySQL 協定連線的 DNS SRV 記錄查找。如需一般資訊,請參閱使用 DNS SRV 記錄連線。如需詳細資訊,請參閱個別 MySQL 連接器的文件。
C API 提供一個
mysql_real_connect_dns_srv()
函式,該函式類似於mysql_real_connect()
,不同之處在於引數清單未指定要連線的 MySQL 伺服器的特定主機。相反地,它會命名一個指定伺服器群組的 DNS SRV 記錄。請參閱 mysql_real_connect_dns_srv()。mysql 用戶端有一個
--dns-srv-name
選項,用於指示指定伺服器群組的 DNS SRV 記錄。請參閱 章節 6.5.1,「mysql — MySQL 命令列用戶端」。
DNS SRV 名稱由服務、協定和網域組成,服務和協定各以底線為首碼
_service._protocol.domain
以下 DNS SRV 記錄識別多個候選伺服器,例如客戶端可能用於建立 X Protocol 連線的伺服器
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 Protocol 服務,tcp
表示 TCP 協定。用戶端可以使用名稱 _mysqlx._tcp.example.com
請求此 DNS SRV 記錄。在連線請求中指定名稱的特定語法取決於用戶端的類型。例如,用戶端可能支援在類似 URI 的連線字串或鍵值對中指定名稱。
傳統協定連線的 DNS 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 Protocol 連接埠)。
使用 DNS SRV 記錄查找時,用戶端通常必須將這些規則應用於連線請求(可能會存在特定於用戶端或連接器的例外情況)
請求必須指定完整的 DNS SRV 記錄名稱,且服務和協定名稱以底線為首碼。
請求不得指定多個主機名稱。
請求不得指定連接埠號碼。
僅支援 TCP 連線。無法使用 Unix socket 檔案、Windows 具名管道和共用記憶體。
如需更多關於在 X DevAPI 中使用基於 DNS SRV 連線的資訊,請參閱使用 DNS SRV 記錄的連線。