Назад | Перейти на главную страницу

Время ожидания подключения клиентов MySql случайным образом

У меня 100 клиентов ПК подключаются к MySQL через локальную сеть.

Они выполняют запросы INSERT без определенного периода. Статистически, одновременно не более 10 компьютеров пытаются выполнить запрос INSERT. Это не ограничение по дизайну, просто выполнение запросов зависит от активности каждого пользователя ПК.

Каждый клиент подключается и отключается каждый раз, когда ему нужно выполнить запрос INSERT (подключиться - вставить - отключить).

Несколько месяцев все работало нормально, но несколько дней назад клиент начал отказывать при подключении.

Примерно два раза в день по 5-10 минут клиенты не могут подключиться. Они получают ошибки тайм-аута. Все клиенты ПК не могут подключиться в течение этого периода времени. Ни один из них не может подключиться.

Время отказа случайное. Иногда бывает в 09:00, иногда в 13:00 и т. Д. Активность каждого пользователя достаточно регулярна, поэтому различий от дня к дню не так много. Я имею в виду, что час дня не имеет значения.

На стороне сервера я не вижу ошибок в журналах mysql, сбоев службы, перезагрузок сервера. У меня включен только журнал ошибок (нет журнала запросов, нет журнала медленных запросов).

Затем я искал проблему с сетью, но трассировка с ПК на сервер и с сервера на ПК была правильной.

Я сделал сетевой захват на сервере (с wirehark), чтобы посмотреть, смогу ли я найти там ошибку.

Во время периода ошибки (эти 5-10 минут) я вижу, что соединения от клиентов ПК застревают в "приветственном" сообщении. Клиентский ПК не отправляет в ответ запрос на «вход в систему».

Копаясь в сетевых трассировках, я обнаружил некоторые проблемы с разрешением имен.

Я использую версию MySQL Community Edition 5.1.41. Я не знаю, верно ли это для более актуальных выпусков, но в этой версии функция «разрешения имен» включена по умолчанию.

При включенном разрешении имен каждый раз, когда запускается сетевое соединение, MySQL пытается разрешить имя компьютера клиента по его IP.

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

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

Решение - отключить разрешение имен. Эта функция важна, если у вас есть привилегии, определенные для некоторых пользователей MySQL, которые зависят от имени хоста клиента. Но поскольку у нас нет никаких привилегий, основанных на имени хоста клиента (вместо этого мы используем IP-адрес), мы можем безопасно отключить функцию «разрешения имен».

Это ссылка, которая объясняет это и указывает мне правильное направление и то, что искать в сетевых захватах:

https://bugs.mysql.com/bug.php?id=49877