6.2.6 Подключение к серверу с использованием записей DNS SRV
В системе доменных имен (DNS) запись SRV (запись местоположения службы) — это тип записи ресурса, который позволяет клиенту указать имя, указывающее на службу, протокол и домен. Поиск DNS по имени возвращает ответ, содержащий имена нескольких доступных серверов в домене, предоставляющих необходимую службу. Дополнительную информацию о DNS SRV, включая то, как запись определяет порядок предпочтения перечисленных серверов, см. в RFC 2782.
MySQL поддерживает использование записей DNS SRV для подключения к серверам. Клиент, получивший результат поиска DNS SRV, пытается подключиться к серверу MySQL на каждом из перечисленных хостов в порядке предпочтения, основываясь на приоритете и весовой характеристике, назначенных каждому хосту администратором DNS. Подключение происходит только если клиент не может подключиться ни к одному из серверов.
Когда несколько экземпляров MySQL, таких как кластер серверов, предоставляют одну и ту же службу для ваших приложений, записи DNS SRV могут использоваться для поддержки функций failover, балансировки нагрузки и репликации. Приложениям неудобно напрямую управлять набором кандидатов для попыток подключения, и записи DNS SRV предоставляют альтернативу:
Записи DNS SRV позволяют администратору DNS сопоставить один домен DNS с несколькими серверами. Записи DNS SRV также могут обновляться централизованно администраторами при добавлении или удалении серверов из конфигурации или при изменении их имен хостов.
Централизованное управление записями DNS SRV исключает необходимость для отдельных клиентов идентифицировать каждый возможный хост в запросах подключения или для обработки подключений дополнительным компонентом программного обеспечения. Приложение может использовать запись DNS SRV для получения информации о потенциальных серверах MySQL, вместо управления информацией о сервере самостоятельно.
Записи DNS SRV могут использоваться в сочетании с пулом подключений, в этом случае подключения к хостам, которые больше не находятся в текущем списке записей DNS SRV, удаляются из пула, когда они становятся неактивными.
MySQL поддерживает использование записей DNS SRV для подключения к серверам в следующих контекстах:
Несколько MySQL Connectors реализуют поддержку DNS SRV; параметры, специфичные для коннектора, позволяют запрашивать поиск записи DNS SRV как для подключений X Protocol, так и для подключений к классическому протоколу MySQL. Для общей информации см. . Подробности см. в документации по отдельным MySQL Connectors.
API C предоставляет функцию, аналогичную , за исключением того, что список аргументов не указывает конкретный хост сервера MySQL для подключения. Вместо этого он называет запись 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. Клиент может запросить эту запись DNS SRV с помощью имени _mysqlx._tcp.example.com. Конкретный синтаксис для указания имени в запросе подключения зависит от типа клиента. Например, клиент может поддерживать указание имени в строке подключения, похожей на 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, именованные каналы Windows и общая память не могут использоваться.
Дополнительную информацию об использовании подключений на основе DNS SRV в X DevAPI см. в .
© 2025 Oracle
Licensed under the GPLv2 License.