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

最近程序出现这样的问题
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:

在这里插入图片描述
修改session的wait_timeout:
set session wait_timeout=200;

再次查看:
在这里插入图片描述
已经被修改
退出mysql ,重新登录:

在这里插入图片描述
再一次的查看session的wait_timeout 发现之前修改的200 又被还原成了100
*也就是说我们修改了session变量,只在本次会话有效果,退出之后,重新登录,设置会被还原

global

查看wait_timeout
在这里插入图片描述
修改global:

在这里插入图片描述
gloal 已经被修改成为200 ,那么此时的session对应的wait_timeout被修改了吗:
在这里插入图片描述
看来单独的修改global的wait_timeout ,那么session的wait_timeout 不会被改变
此时我们退出mysql 重新登录,session 会不会被改变
在这里插入图片描述
之前修改的global对应的wait_timeout 不会随着退出,数据会被还原
session 再次登录之后:
在这里插入图片描述
还是100 说明仅仅修改global的wait_timeout变量并不会导致session的改变
那么我们继续修改global的interactive_timeout 变量:修改之后看一下session对应的变量会不会被修改
在这里插入图片描述
修改之后,我们再次退出会话
在这里插入图片描述
在这里插入图片描述

改变了,也就是说我们修改了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 也被修改了

在这里插入图片描述
那么global修改之后,是不是就不会被改变,不是的
global变量的修改会随着mysql的重启而被还原
下面我们是修改之后的global变量,但是没有重启mysql:

在这里插入图片描述

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

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

修改my.cnf

[mysqld]
  interactive_timeout = 57600
  wait_timeout = 57600

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值