Установка переменной сеанса MySQL wait_timeout

#java #mysql

#java #mysql

Вопрос:

В настоящее время я работаю в программе Java с использованием mysql. Я столкнулся с проблемой с этим сообщением:

Сбой канала связи. Последний пакет, успешно полученный с сервера, был получен 174,165,153 миллисекунд назад. Последний пакет, успешно отправленный на сервер, был 4 миллисекунды назад.

Я считаю, что это связано с переменной сеанса ‘wait_timeout’. Мое предположение может быть неверным, поэтому я подтверждаю его здесь. Действительно ли это из-за переменной сеанса ‘wait_timeout’? Означает ли эта ошибка, что мое подключение к базе данных «истекло» в том смысле, что время ожидания сеанса уже истекло? Если да, у меня другая проблема.. Я не могу воспроизвести указанную ошибку..

Это то, что я пытаюсь сделать, чтобы повторить ошибку.

  1. Установка wait_timeout переменной 5 , значение которой изначально 28800 (8 часов).

    mysql> set session wait_timeout=5;

  2. Думая, что моя следующая попытка доступа к базе данных будет применять это, я бы запустил этот код:
         Class.forName("com.mysql.jdbc.Driver");
        oConnection = DriverManager.getConnection(sUrl,sUser,sPass);
        System.out.println("Database Connection Established.n");
        Thread.sleep(6000);
    
        executeSimpleQuery();
     

    executeSimpleQuery() Функция просто выполняет простую SELECT * FROM инструкцию, чтобы проверить, работает ли соединение по-прежнему. По-видимому, если wait_timeout равен всего 5, и я перевел поток в спящий режим на 6 секунд, срок действия соединения истечет, и должна быть выдана ошибка. Но ожидаемого результата не происходит, вместо этого он выполняет запрос.

Что я должен сделать, чтобы повторить ошибку?

Ответ №1:

Вы устанавливаете wait_timeout=5 для текущего сеанса; затем открываете другой сеанс (в приложении Java) и выполняете запрос. Попробуйте установить эту переменную после открытия соединения или установите ее глобально.

Например —

 SET @@global.wait_timeout = 15; -- Set global variable
SET @@local.wait_timeout = 25; -- Set session variable
SELECT @@global.wait_timeout, @@local.wait_timeout; -- Check global and session variables
 

Комментарии:

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