修改数据库mysql的wait_timeout
mysql是什么系统最近在测试项⽬的时候,特别每天第⼀次测试的时候,总是报数据库连接不上,连接超时的错误,连续连接才能解决问题
类似于⼀下错误
我的理解是wait_timeout设置的是⼀个访问等待⼀个周期时长,⽐如这个wai_timeout默认是8个⼩时,如果两次访问的时间差⼤于这个值,就会报连接超时的错误。这个是mysql设置的⼀个connection的空闲时间,超过这个时间,mysql就会主动断了这个connection,⽽连接池并不知道该connection已经失效,如果这时有Client请求connection,DBCP将该失效的Connection提供给Client,将会造成异常。
打开MySQL的控制台,运⾏:show variables like ‘%timeout%’,查看和连接时间有关的MySQL系统变量,得到如下结果:
aspire形容词形式wait_timeout = 28800ms = 8 hours
其中wait_timeout就是负责超时控制的变量,其时间为长度为28800s,就是8个⼩时,那么就是说MySQL的服务会在操作间隔8⼩时后断开,需要再次重连。也有⽤户在URL中使⽤jdbc.url=jdbc:mysql://localhost:3306/nd?autoReconnect=true来使得连接⾃动恢复,当然了,这是可以的,不过是MySQL4及其以下版本适⽤。MySQL5中已经⽆效了,必须调整系统变量来控制了。MySQL5⼿册中对两个变量有如下的说明:
interactive_timeout:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使⽤
CLIENT_INTERACTIVE选项的客户端。⼜见wait_timeout
js中的value是干嘛的wait_timeout:服务器关闭⾮交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义),⼜见
interactive_timeout
如此看来,两个变量是共同控制的,那么都必须对他们进⾏修改了。继续深⼊这两个变量wait_timeout
的取值范围是1-
2147483(Windows),1-31536000(linux),interactive_time取值随wait_timeout变动,它们的默认值都是28800。
MySQL的系统变量由配置⽂件控制,当配置⽂件中不配置时,系统使⽤默认值,这个28800就是默认值。要修改就只能在配置⽂件⾥修改。Windows下在%MySQL HOME%/bin下有mysql.ini配置⽂件,打开后在如下位置添加两个变量,赋值。(这⾥修改为388000)
解决⽅法,linux的服务器上的mysql:
c需要strtokset global interactive_timeout=31536000;
直方图可以观察什么东西show VARIABLES like '%timeout%';
当只改wait_timeout 是不能改interactive_timeout,但若只改interactive_timeout,wait_timeout 也会跟着改
switchcase结构中case后的表达式必须为常量表达式set interactive_timeout=31536000; 是修改session变量,是不起作⽤的,当关闭此次会话,再次打开发现还是原来的值
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论