在網域名稱系統 (DNS) 中,SRV 記錄(服務位置記錄)是一種資源記錄類型,可讓用戶端指定一個名稱,指出服務、協定和網域。對名稱進行 DNS 查找會傳回一個回覆,其中包含網域中提供所需服務的多個可用伺服器的名稱。有關 DNS SRV 的資訊,包括記錄如何定義列出伺服器的優先順序,請參閱 RFC 2782。
MySQL 支援使用 DNS SRV 記錄連線至伺服器。接收到 DNS SRV 查找結果的用戶端會嘗試根據 DNS 管理員為每個主機指派的優先順序和權重,依優先順序連線至列出主機上的 MySQL 伺服器。只有在用戶端無法連線至任何伺服器時,才會發生連線失敗。
當多個 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 支援;連接器特定的選項可讓要求 DNS SRV 記錄查找,以用於 X 通訊協定連線和傳統 MySQL 通訊協定連線。如需一般資訊,請參閱 使用 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 通訊協定連線的伺服器
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 通訊協定服務,而 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 通訊協定連接埠)。
當使用 DNS SRV 記錄查找時,用戶端通常必須將這些規則套用至連線請求(可能會有用戶端或連接器特定的例外情況)
請求必須指定完整的 DNS SRV 記錄名稱,服務和協定名稱前面加上底線。
請求不得指定多個主機名稱。
請求不得指定連接埠號碼。
僅支援 TCP 連線。不支援 Unix socket 檔案、Windows 具名管道和共用記憶體。
如需在 X DevAPI 中使用基於 DNS SRV 的連線的更多資訊,請參閱使用 DNS SRV 記錄的連線。