最近程序出现这样的问题
The last packet successfully received from the server was 38251886 milliseconds ago. The last packet sent successfully to the server was 38251886 milliseconds ago. is longer than the server configured value of ‘wait_timeout’. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values

出现这样的问题,按照翻译来的意思是 :“最后一个数据包在38251886毫秒之前成功被接收 ,38251886 大概是10个小时,超出了数据的wait_timeout 的配置,,你可以考虑在和数据库交互之前测试连接是否有效,也可以考虑增加wait_timeout的时间“
但是wait_timeout也不能设置的太长,其实是程序和数据库的交互等待时间,如果等待的时间太长这样也会耗费资源,默认的是8个小时
wait_timeout 有session级别的,和global级别的
session 算是一个会话,意思是说这次会话
global 是 全局的
下面我们通过例子来看session和global的区别:

session:

mysql 如何修改wait_timeout,interactive_timeout ,和 session ,global 有什么关系_wait_timeout


修改session的wait_timeout:

set session wait_timeout=200;再次查看:

mysql 如何修改wait_timeout,interactive_timeout ,和 session ,global 有什么关系_session_02


已经被修改

退出mysql ,重新登录:

mysql 如何修改wait_timeout,interactive_timeout ,和 session ,global 有什么关系_session_03


再一次的查看session的wait_timeout 发现之前修改的200 又被还原成了100

*也就是说我们修改了session变量,只在本次会话有效果,退出之后,重新登录,设置会被还原

global

查看wait_timeout

mysql 如何修改wait_timeout,interactive_timeout ,和 session ,global 有什么关系_mysql_04


修改global:

mysql 如何修改wait_timeout,interactive_timeout ,和 session ,global 有什么关系_mysql_05


gloal 已经被修改成为200 ,那么此时的session对应的wait_timeout被修改了吗:

mysql 如何修改wait_timeout,interactive_timeout ,和 session ,global 有什么关系_session_06


看来单独的修改global的wait_timeout ,那么session的wait_timeout 不会被改变

此时我们退出mysql 重新登录,session 会不会被改变

mysql 如何修改wait_timeout,interactive_timeout ,和 session ,global 有什么关系_interactive_out_07


之前修改的global对应的wait_timeout 不会随着退出,数据会被还原

session 再次登录之后:

mysql 如何修改wait_timeout,interactive_timeout ,和 session ,global 有什么关系_mysql_08


还是100 说明仅仅修改global的wait_timeout变量并不会导致session的改变

那么我们继续修改global的interactive_timeout 变量:修改之后看一下session对应的变量会不会被修改

mysql 如何修改wait_timeout,interactive_timeout ,和 session ,global 有什么关系_session_09


修改之后,我们再次退出会话

mysql 如何修改wait_timeout,interactive_timeout ,和 session ,global 有什么关系_global_10


mysql 如何修改wait_timeout,interactive_timeout ,和 session ,global 有什么关系_wait_timeout_11

改变了,也就是说我们修改了global的interactive_timeout 变量,然后退出重新进入发现session对应的wait_timeout变量的值也发生了改变,并且和interactive的值一样了

看来global和session 是有关联的

其实到这个地方我们可以看出来的是:

session 是会话,我们修改的变量会随着我们退出mysql会话而被还原
global 是全局的,并且global的inveractive_timeout 变量和session的interactive_timeout,wait_timeout 是关联的,修改了global 的interactive_timeout 变量的值之后,退出会话重新进入会发现session的interactive_timeout,wait_timeout 也被修改了

mysql 如何修改wait_timeout,interactive_timeout ,和 session ,global 有什么关系_wait_timeout_12


那么global修改之后,是不是就不会被改变,不是的

global变量的修改会随着mysql的重启而被还原

下面我们是修改之后的global变量,但是没有重启mysql:

mysql 如何修改wait_timeout,interactive_timeout ,和 session ,global 有什么关系_wait_timeout_13

现在我们重启mysql:
发现上面设置的变量在重启mysql之后都被还原了

mysql 如何修改wait_timeout,interactive_timeout ,和 session ,global 有什么关系_wait_timeout_14


那么我们如何修改interactive_timeout和wait_timeout变量即使在重启之后仍然不被还原,这个时候我们 需要修改my.cnf这个配置文件

修改my.cnf

[mysqld]
interactive_timeout = 57600
wait_timeout = 57600

修改了这个配置文件之后,我们会发现重启之后mysql变量的设置都是从配置文件中获取的
算是作为终极的修改

上面是对wait_timeout和interactive_timeout的修改做出了讨论
希望对你有所帮助