Мы только что обновили наши существующие серверы БД MySQL5.1 на более новое (гораздо лучшее) оборудование с MySQL 5.5, и в течение почти 6 недель все идет в основном гладко.
Буквально за последние несколько дней я заметил несколько ошибок, например:
Из ведомого MySQL:
[ОШИБКА] Ошибка чтения пакета с сервера: потеряно соединение с сервером MySQL во время запроса (server_errno = 2013)
Или из Apache / Other:
Потеряно соединение с сервером MySQL при «чтении начального пакета связи», системная ошибка: 110
В какой-то момент этим вечером многие веб-узлы сообщили об этой ошибке за трехминутный период (многие такие отчеты, поскольку это было в период занятости). Однако проблемы, похоже, не связаны ни с одним периодом экстремальной нагрузки. Во всех смыслах и целях нагрузка на соединение / поток в MySQL является нормальной (от 10 до 40 подключенных потоков), а веб-нагрузка была НАМНОГО выше в разы за последние несколько недель.
Могут ли быть другие причины этих ошибок подключения, которых я не вижу?
Ура, настраиваем переменную max_allowed_packet, увеличиваем ее значение и перезапускаем MySQL. Это обеспечит MySQL большую способность читать пакеты. Попробуйте и поделитесь с нами своим мнением.
вы можете попробовать увеличить время ожидания или время ожидания подключения, но это может скрывать основную проблему. у вас может быть неправильный запрос, из-за которого процессы mysql складываются. проверьте (или включите) ваш медленный журнал sql. запустите mysqltuner для возможной настройки переменных. прочтите раздел настройки mysql документации mysql и убедитесь, что ваши директивы в порядке.
РЕДАКТИРОВАТЬ: на уровне приложения, то есть php, вы можете умереть php-скрипт, если он не завершится в течение определенного периода времени, настроив директиву max_execution_time
ошибка 110 - «Превышено время ожидания соединения», что означает, что что-то происходит в сети между вашим клиентом и сервером MySQL. Помимо проблем с сетью, вы также можете увидеть это, если сервер слишком перегружен, чтобы отвечать на входящее соединение.