Я использую базу данных MySQL, работающую в Windows, и из соображений производительности подключаюсь к ней с помощью именованных каналов.
Приложение (Java), использующее базу данных (через Hibernate), может позволить соединению простаивать довольно долгое время, что приводит к сбою соединения со следующим сообщением:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: последний пакет, успешно полученный от сервера, был 33 558 297 миллисекунд назад. Последний пакет, успешно отправленный на сервер, был 33 558 297 миллисекунд назад. длиннее, чем заданное сервером значение 'wait_timeout'. Вам следует рассмотреть возможность истечения срока действия и / или проверки действительности соединения перед использованием в вашем приложении, увеличения значений, настроенных сервером для тайм-аутов клиента, или использования свойства соединения Connector / J 'autoReconnect = true', чтобы избежать этой проблемы.
autoReconnect
к сожалению, не действует (и тоже autoReconnectForPools
), но то wait_timeout
документы утверждать, что wait_timeout
применяется только «к соединениям файлов сокетов TCP / IP и Unix, но не к соединениям, выполненным через именованные каналы или разделяемую память».
Как я могу изменить wait_timeout
для именованных каналов?
В зависимости от того, как вы настраиваете свой источник данных, вы можете указать такой параметр, как idle-timeout-minutes
. Если wait_timeout
были установлены на 5 минут, установлены idle-timeout-minutes
к 4.
Для соединений MySQL можно указать только два значения тайм-аута: wait_timeout и Interactive_timeout. interactive_timeout
потенциально может применяться и к именованным каналам, если он подключен как клиент.
Если я правильно помню, если не указаны ни wait_timeout, ни interactive_timeout, значение по умолчанию - 28800.