com.mysql.jdbc.exceptions.jdbc4. Отказ канала CommunicationsException:Communications [дубликат]

43
задан Tiny 24 November 2014 в 08:47
поделиться

3 ответа

Это завернутое исключением и не очень интересно. Это корневая причина исключения, которое фактически говорит нам о корневой причине. Пожалуйста, смотри немного дальше в штабеле. Шанс большой, что вы тогда сталкиваетесь с SQLException: соединение отказалось или SQLException: Connection Timed Out .

Если это верно в вашем случае, а затем все возможные причины:

  1. IP-адрес или имя хоста в URL JDBC неверно.
  2. Имя хоста в URL JDBC не распознается локальным DNS-сервером.
  3. Номер порта отсутствует или неправильный в URL JDBC.
  4. Сервер БД снижается.
  5. Сервер DB не принимает соединения TCP / IP.
  6. Что-то между Java и DB блокируют соединения, например, брандмауэр или прокси.

Для решения того или иного, следуйте следующим советам:

  1. Проверьте и проверьте их с помощью Ping .
  2. Обновить DNS или используйте IP-адрес в URL JDBC URL.
  3. Проверьте его на основе My.cnf MySQL DB.
  4. Начните его.
  5. Убедитесь, что MySQLD запущен без параметра - опция Skip-Networking .
  6. Отключить брандмауэр и / или настроить брандмауэр / прокси, чтобы разрешить / передать порт.

Кстати (и не связано с фактической проблемой), вам не обязательно нужно загружать драйвер JDBC на каждый GetConnection () . Только один раз во время запуска достаточно.

37
ответ дан 26 November 2019 в 22:59
поделиться

У нас есть программное обеспечение (webapp с Tomcat), использующее общий пул соединений Apache, и мы отлично работали в течение многих лет. В прошлом месяце мне пришлось обновлять библиотеки из-за старой ошибки, с которой мы столкнулись. Ошибка была исправлена в одной из последних версий.

Вскоре после установки мы начали получать именно эти сообщения. Из тысяч соединений, которые мы получали в день, горстка (обычно до 10) получала это сообщение об ошибке. Не было никакого реального шаблона, за исключением того, что они иногда группировались в маленькие группы от 2 до 5.

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

Вы обновляли банку MySQL в последнее время? Похоже, что в нашей (признаться, очень старой) банке может быть новая настройка, которой раньше не было.

Я согласен с BalusC попробовать некоторые другие опции в вашей конфигурации, например, те, которые вы передаете в MySQL (в дополнение к таймауту подключения).

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

Другая случайная идея: Я не знаю, что происходит, почему вы пытаетесь использовать закрытое соединение (какое исключение вы получаете). Могли бы вы случайно где-нибудь закрыть соединение?

3
ответ дан 26 November 2019 в 22:59
поделиться

Как упоминал BalusC, было бы очень полезно опубликовать полную трассировку стека (всегда публикуйте полную трассировку стека, это бесполезно и разочаровывает чтобы иметь только первые строки трассировки стека).

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

2
ответ дан 26 November 2019 в 22:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: