我目前正在使用涉及mysql的java程序。我遇到了 问题 ,其中包含以下消息:
通讯链接失败。成功收到最后一个数据包 从服务器是174,165,153毫秒前。最后一个数据包发送 成功到服务器是4毫秒前。
我认为这与会话变量'wait_timeout'有关。我的假设可能是错的,所以我在这里确认了。这真的是因为'wait_timeout'会话变量吗?在会话超时已经失效的意义上,此错误是否意味着我的数据库连接“已过期”?如果是,我还有另一个问题..我无法重现上述错误..
这是我为了复制错误而尝试的。
将wait_timeout
变量设置为原来为5
的{{1}}(8小时)。
28800
认为我下次尝试访问数据库会应用这个,我会运行这段代码:
mysql> set session wait_timeout=5;
Class.forName("com.mysql.jdbc.Driver");
oConnection = DriverManager.getConnection(sUrl,sUser,sPass);
System.out.println("Database Connection Established.\n");
Thread.sleep(6000);
executeSimpleQuery();
函数只执行一个简单的executeSimpleQuery()
语句来检查连接是否仍然有效。显然,如果wait_timeout只有5并且我让线程休眠了6秒,那么连接现在将过期并且应该产生错误。但是,预期结果不会发生,而是执行查询。
我该怎么做才能复制错误?
答案 0 :(得分:2)
您为当前会话设置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