Ошибка связи MySQL Communications из-за основного исключения - PullRequest
1 голос
/ 26 октября 2011


Я сталкиваюсь с такой досадной проблемой,
работает на Tomcat 6 и MySQL с использованием TomcatJDBC Lib.

com.mysql.jdbc.CommunicationsException: 

Ошибка канала связи из-за основного исключения:

** BEGIN NESTED EXCEPTION ** 

java.io.EOFException

STACKTRACE:

java.io.EOFException
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1934)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2380)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2909)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1600)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1695)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3026)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1137)
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1231)

По прошествии некоторого времени (20sh mins) все соединения с БД, похоже, истекают.

autoReconnect=true" 
validationQuery="Select 1"

Все установлено.
Я обрабатываю повторное подключение к базе данных, ион работает нормально, но огромные файлы журналов плохи, я не могу обработать это исключение, чтобы заставить его замолчать.Также этот тип «исправления» не является правильным решением.Есть ли способ:
a) Обработать это исключение молча
b) Исправить эту проблему (у меня нет брандмауэра, о котором я знаю) (нет доступа к my.cnf для конфигурации mysql)

Эта проблема также возникает в Tomcat 5 с Apache jConnector в совершенно другом приложении, без каких-либо брандмауэров, которые могут разорвать соединение.

(перехват EOFException или CommunicationsException для метода, который вызывает соединениене помогает конечно.)

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 13 июня 2013

a) Остановите сервер базы данных MySQL и сервер приложений (Tomcat или другой).

b) Настройки Mysql: это следует сделать в файле "my.ini" в папке mysql.

wait_timeout = 1200 (т. Е. 20 минут - сохраняйте то же время вашего брандмауэра или любого другого программного обеспечения сторонних производителей)

Вы можете установить уровень БД по вышеуказанному запросу. установить wait_timeout = 1200;

Просмотр настроек по вышеуказанному запросу. Показывать переменные, такие как 'wait_timeout';

в) Добавьте два свойства в файл Torque.properties.

minEvictableIdleTimeMillis A время в миллисекундах, в течение которого соединение может оставаться в пуле бездействующим

    torque.dsfactory.csa.pool.minEvictableIdleTimeMillis = 1100000

# timeBetweenEvictionRunsMillis A время в миллисекундах между запуском потока вытеснения; должно быть больше 0; по умолчанию -1

  torque.dsfactory.csa.pool.timeBetweenEvictionRunsMillis = 2000


    d) Start application and db server
1 голос
/ 23 мая 2018

Проверьте состояние MYSQL с помощью команды / s Теперь проверьте номер порта, который вы упомянули в коде и который должен совпадать с портом MYSQL если номера портов отличаются, измените их

(JDBC: MySQL: // локальный: 3306 / MRT) в этом примере мой номер порта 3306

1 голос
/ 25 октября 2012

вам нужно установить свойства MaxIdle и Timeout в файле server.xml в ресурсе.

...