X DevAPI 支援使用 DNS SRV 記錄來連線至 MySQL 伺服器。接收到 DNS SRV 查詢結果的用戶端會嘗試依喜好順序連線至所列每個主機上的 MySQL 伺服器,該順序是根據 DNS 管理員指派給每個主機的優先順序和權重。只有在用戶端無法連線至任何伺服器時,才會發生連線失敗。本節重點介紹在 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 DevAPI mysqlx.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 Socket 檔案、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 的 Connector/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)