文件首頁
X DevAPI 使用者指南
下載本手冊
PDF (美式信紙) - 1.4Mb
PDF (A4) - 1.4Mb


X DevAPI 使用者指南  /  ...  /  使用 DNS SRV 記錄的連線

2.2.4 使用 DNS SRV 記錄的連線

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)