2.2.4 Подключения с использованием записей DNS SRV
X DevAPI поддерживает использование записей DNS SRV для подключения к серверам MySQL. Клиент, получивший результат запроса DNS SRV, пытается подключиться к серверу MySQL на каждом из перечисленных хостов в порядке приоритета, основанном на приоритете и весовой оценке, назначенных каждому хосту администратором DNS. Отключение происходит только в том случае, если клиент не может подключиться ни к одному из серверов. Этот раздел посвящен использованию DNS SRV в приложениях X DevAPI. Для получения общей информации об поддержке DNS SRV в MySQL см. .
MySQL Connectors, реализующие X DevAPI, могут запросить поиск записи DNS SRV, указав mysqlx+srv в качестве элемента схемы строки подключения, подобной URI, вместе с именем 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 Connectors также имеют специфичные для подключения параметры для запроса поиска записи DNS SRV как для подключений по протоколу X, так и для подключений по классическому протоколу MySQL. Для получения подробностей см. документацию для отдельных MySQL Connectors.
MySQL Shell в настоящее время не поддерживает записи DNS SRV.
При использовании поиска записи DNS SRV клиенты, как правило, должны применять следующие правила для запросов на подключение (могут быть исключения, специфичные для подключения):
-
Запрос должен указывать полное имя записи DNS SRV, при этом имена сервиса и протокола должны быть префиксными символами подчеркивания. Например, эта запись DNS SRV относится к сервису протокола X, реализованному по протоколу TCP, который может предоставляться несколькими серверами в установке:
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, именованные каналы Windows и общая память не могут быть использованы.
Java-код
Session mySession = new
SessionFactory().getSession("mysqlx+srv://user:password@_mysql._tcp.example.com/db");
Код JavaScript Node.js
mysqlx.getSession({ host: '_mysqlx._tcp.example.com', resolveSrv: true })
Код C#
var session = MySQLX.GetSession("mysqlx+srv://user:password@_mysqlx._tcp.example.com.");
Код Connector/C++ с использованием X DevAPI для 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)
© 2025 Oracle
Licensed under the GPLv2 License.