Поделиться через


Устранение неполадок с подключением в База данных 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.

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