Устранение неполадок с подключением в База данных Azure для MySQL — гибкий сервер

ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для MySQL — отдельный сервер База данных Azure для MySQL — гибкий сервер

Внимание

База данных Azure для MySQL один сервер находится на пути выхода на пенсию. Настоятельно рекомендуется выполнить обновление до База данных Azure для MySQL гибкого сервера. Дополнительные сведения о миграции на гибкий сервер База данных Azure для MySQL см. в статье "Что происходит с одним сервером База данных Azure для MySQL?"

MySQL Community Edition управляет подключениями с помощью одного потока на каждое соединение. В результате каждое подключение пользователя получает выделенный поток операционной системы в процессе mysqld.

С этим типом обработки подключений могут возникнуть потенциальные проблемы. Например, использование памяти относительно велико, если имеется большое количество пользовательских подключений, даже если это неактивные подключения. Кроме того, при работе с тысячами пользовательских подключений возрастает уровень внутренних конфликтов сервера и накладных расходов на переключение контекста.

Диагностика распространенных ошибок подключения

Всякий раз, когда у вашего экземпляра База данных Azure для MySQL гибкий сервер возникают проблемы с подключением, помните, что проблемы могут существовать в любом из трех уровней: клиентское устройство, сеть или База данных Azure для MySQL гибкий экземпляр сервера.

В результате при диагностике ошибок подключения обязательно учитывайте все сведения о следующем:

  • Клиент, в том числе:
    • Конфигурация (локальная, виртуальная машина Azure и т. д. или компьютер DBA).
    • Операционная система.
    • Программное обеспечение и версии.
  • Строка подключения и все включенные параметры.
  • Топология сети (тот же регион? та же AZ? каковы правила брандмауэра? построение маршрутов).
  • Пул подключений (параметры и конфигурация), если он используется.

Также важно определить, влияет ли проблема с подключением к базе данных на одно клиентское устройство или несколько клиентских устройствах. Если ошибки влияют только на одного из нескольких клиентов, скорее всего, проблема связана с этим клиентом. Однако если все клиенты сталкиваются с одной и той же ошибкой, скорее всего, проблема связана с сервером базы данных или сетью.

Не забудьте рассмотреть также возможность превышения рабочей нагрузки, особенно если приложение открывает максимальное количество подключений за очень короткое время. Для выяснения можно использовать такие метрики, как "Всего подключений", "Активные подключения" и "Прерванные подключения".

При установке подключения с клиентского устройства или приложения первым важным вызовом в mysql является getaddrinfo, который выполняет преобразование DNS из конечной точки, предоставленной в IP-адрес. Если адрес не удается получить, MySQL отображает сообщение об ошибке, например, "ОШИБКА 2005 (HY000): неизвестный узел сервера MySQL "mysql-example.mysql.database.azure.com" (11)" с номером в конце (11, 110 и т. д.).

Коды ошибки 2005 на стороне клиента

Краткие справочные заметки о некоторых кодах ошибки 2005 на стороне клиента представлены в следующей таблице.

Код ОШИБКИ 2005 Примечания
(11) "EAI_SYSTEM — системная ошибка" Ошибка разрешения DNS на стороне клиента. Не проблема с гибким сервером База данных Azure для MySQL. Используйте dig/nslookup на клиентском компьютере для устранения неполадок.
(110) "ETIMEDOUT — время ожидания подключения истекло" Превышено время ожидания при подключении к DNS-серверу клиента. Не проблема с гибким сервером База данных Azure для MySQL. Используйте dig/nslookup на клиентском компьютере для устранения неполадок.
(0) "имя неизвестно" Указанное имя не было разрешено DNS. Проверьте входные данные на клиентском компьютере. Это, скорее всего, не проблема с База данных Azure для MySQL гибким сервером.

Второй вызов в mysql связан с подключением сокета и при просмотре сообщения об ошибке, например ERROR 2003 (HY000): не удается подключиться к гибкому серверу База данных Azure для MySQL на "mysql-example.mysql.database.azure.com" (111)", номер в конце (99, 110, 111, 113 и т. д.).

Коды ошибки 2003 на стороне клиента

Краткие справочные заметки о некоторых кодах ошибки 2003 на стороне клиента представлены в следующей таблице.

Код ОШИБКИ 2003 Примечания
(99) "EADDRNOTAVAIL - Не удается назначить запрошенный адрес" Эта ошибка не вызвана База данных Azure для MySQL гибким сервером, а на стороне клиента.
(110) "ETIMEDOUT — время ожидания подключения истекло" Превышено время ожидания при подключении к указанному IP-адресу. Скорее всего, это проблема с безопасностью (правилами брандмауэра) или сетью (маршрутизацией). Как правило, это не проблема с гибким сервером База данных Azure для MySQL. Используйте nc/telnet/TCPtraceroute на клиентском устройстве для устранения неполадок.
(111) "ECONREFUSED — в соединении отказано" Пока пакеты достигли целевого сервера, сервер отклонил соединение. Это может быть попытка подключения к неправильному серверу или неправильному порту. Это также может быть связано с целевой службой (База данных Azure для MySQL гибким сервером), восстановлением после отработки отказа или завершением аварийного восстановления и еще не принимаю подключения. Эта проблема может быть либо на стороне клиента, либо на стороне сервера. Используйте nc/telnet/TCPtraceroute на клиентском устройстве для устранения неполадок.
(113) "EHOSTUNREACH — узел недоступен" Таблица маршрутизации клиентского устройства не содержит путь к сети, в которой расположен сервер базы данных. Проверьте конфигурацию сети клиентского устройства.

Другие коды ошибок

Краткие справочные заметки о некоторых других кодах ошибок, связанных с проблемами, возникающими после успешного установления сетевого подключения к серверу базы данных, представлены в следующей таблице.

Код ошибки Примечания
ОШИБКА 2013 "Потеряно подключение к серверу MySQL" Соединение было установлено, но после этого было потеряно. Такое может произойти при попытке подключения к чему-то, что не является MySQL (например, использование клиента MySQL для подключения к SSH через порт 22). Такое также может произойти, если суперпользователь завершит сеанс. Такое также может произойти, если время сеанса базы данных истекло. Или это может быть связано с проблемами на сервере базы данных после установления соединения. Это может произойти в любое время в течение времени существования клиентского подключения. Это может указывать на то, что в базе данных имеется серьезная проблема.
ОШИБКА 1040 (08004) "Слишком много подключений" Количество подключенных клиентов базы данных уже соответствует настроенному максимальному количеству. Необходимо выяснить, почему для базы данных установлено столько подключений.
ОШИБКА 1045 "Пользователю отказано в доступе" Клиент предоставил неверное имя пользователя или пароль, поэтому базой данных отказано в доступе.
ОШИБКА 2006 "Не удается обнаружить сервер MySQL" Аналогично записи ОШИБКА 2013 "Потеряно подключение к серверу MySQL" в предыдущей таблице.
ОШИБКА 1317 "Выполнение запроса было прервано" Ошибка, с которой сталкивается клиент, когда основной пользователь останавливает запрос, а не подключение.
ОШИБКА 1129 "Узел "1.2.3.4" заблокирован из-за множества ошибок подключения" Проведите разблокировку с помощью mysqladmin flush-hosts. Все клиенты на одном компьютере будут заблокированы, если один клиент этого компьютера несколько раз попытается использовать неправильный протокол для подключения к MySQL (например, telnetting для порта MySQL). Как говорится в сообщении об ошибке, администратор базы данных должен запустить FLUSH HOSTS;, чтобы устранить проблему.

Примечание.

Дополнительные сведения об ошибках подключения см. в записи блога по изучению проблем с подключением к База данных Azure для MySQL гибкому серверу.

Следующие шаги

Чтобы найти ответы на самые важные вопросы либо опубликовать новый вопрос или ответ, посетите Stack Overflow.