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