设置MySql wait_timeout会话变量

时间:2011-10-25 10:43:13

标签: java mysql

我目前正在使用涉及mysql的java程序。我遇到了 问题 ,其中包含以下消息:

  

通讯链接失败。成功收到最后一个数据包   从服务器是174,165,153毫秒前。最后一个数据包发送   成功到服务器是4毫秒前。

我认为这与会话变量'wait_timeout'有关。我的假设可能是错的,所以我在这里确认了。这真的是因为'wait_timeout'会话变量吗?在会话超时已经失效的意义上,此错误是否意味着我的数据库连接“已过期”?如果是,我还有另一个问题..我无法重现上述错误..

这是我为了复制错误而尝试的。

  1. wait_timeout变量设置为原来为5的{​​{1}}(8小时)。

    28800

  2. 认为我下次尝试访问数据库会应用这个,我会运行这段代码:

    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秒,那么连接现在将过期并且应该产生错误。但是,预期结果不会发生,而是执行查询。

  3. 我该怎么做才能复制错误?

1 个答案:

答案 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