首页 » Web前端 » phpmysql主动断开技巧_MySQL为什么莫名其妙的断开连接以及解决筹划

phpmysql主动断开技巧_MySQL为什么莫名其妙的断开连接以及解决筹划

访客 2024-11-04 0

扫一扫用手机浏览

文章目录 [+]

在支配完成后,网站当时可以正常事情,但是第二天访问网站的时候却会碰着一个500 Server Error。

从日志中可以看出是MySQL数据库涌现了非常

phpmysql主动断开技巧_MySQL为什么莫名其妙的断开连接以及解决筹划

翻译如下:

phpmysql主动断开技巧_MySQL为什么莫名其妙的断开连接以及解决筹划
(图片来自网络侵删)

末了一个数据包在 83827560 ms 之前被成功吸收,末了一个数据包在83827560 ms 之前被成功发送。
比做事的配置参数wait_timeout的值要长。

日志中给出的建议如下

翻译如下:

你应考虑在程序中进行数据库操作之前考验数据库连接的有效性或者将数据库的autoReconnect属性设置为true来避免这个问题

关于wait_timeout和autoReconnect下面我们会依次剖析先容!

缘故原由剖析

我们进入mysql的命令行查询超时时间

28800单位是秒转化成小时便是8小时

看出MySQL的默认设置,当一个连接的空闲韶光超过8小时后,MySQL就会断开该连接

以是创造问题出在如果超过这个wait_timeout韶光(默认是8小时)对数据库没有任何操作,那么MySQL会自动关闭数据库连接以节省资源

数据库连接自动断开的问题确实是在第二天发生了,也便是在一个晚上没有对数据库进行操作(显然超过了8小时)的情形下发生的这个问题

大家用命令show processlist; 可以查看Sleep状态的进程Sleep,同时可以看到每个进程Sleep多久了:

下面先容下办理和优化办法!

办理方法1.autoReconnect

这个参数表示在mysql超时断开连接后会自动重新连接

配置的话,只须要在连接mysql的语句写上autoReconnect=true

jdbc:mysql://127.0.0.1:3306/stock_tweet?autoReconnect=true

下面是MySQL官网对autoReconnect的阐明:

同时可以看到官网不推举利用这个参数,由于它有一些副浸染

详细先容下:

原有连接上的事务将会被回滚,事务的提交模式将会丢失原有连接持有的表的锁将会全部开释原有连接关联的会话Session将会丢失,重新规复的连接关联的将会是一个新的会话Session原有连接定义的用户变量将会丢失原有连接定义的预编译SQL将会丢失原有连接失落效,新的连接规复后,MySQL将会利用新的记录行来存储连接中的性能数据2.修正配置

涉及到两个配置参数interactive_timeout和wait_timeout

wait_timeout 指的是mysql在关闭一个非交互的连接之前所要等待的秒数

interactive_time 指的是mysql在关闭一个交互的连接之前所要等待的秒数

对付交互和非交互连接,说得直白一点便是,通过mysql客户端连接数据库是交互式连接,通过jdbc连接数据库是非交互式连接。

配置方法:

1.会话办法

msyql> set global wait_timeout=2880000;msyql> set global interactive_timeout=2880000;

这种办法只对当前会话生效

2.修正配置文件办法

修正/etc/my.cnf文件,在 [mysqld] 节中设置:

之后再重启下做事器就好了

把稳:

将wait_timeout这个值设置得大了,可能会导致空闲连接过多。

如果你的MySQL Server有大量的闲置连接,他们不仅会白白花费内存,而且如果连接一贯在累加而不断开,终极肯定会达到MySQL Server的连接上限数,这会报'too many connections'的缺点。

连接池配置

由于连接池的配置也会影响项目和MySQL的连接,以是也须要对数据库连接池的一些配置做一定修正

我们以Spring Boot 2.0默认的数据库连接池HikariCP为例

紧张是下面这几个配置

maximum-pool-size:

最大连接数,超过这个数,新的数据库访问线程会被阻,缺省值:10。

常见的缺点是设置一个太大的值,连接数多反而性能低落。

参考打算公式是:

#core_count:CPU个数,effective_spindle_count:硬盘个数connections = ((core_count 2) + effective_spindle_count)

例如:一个4核,1块硬盘的做事器,连接数 = (4 2) + 1 = 9,凑个整数,10就可以了。

minimum-idle:

最小的连接数目

max-lifetime:

最大的连接韶光,用来设置一个connection在连接池中的存活韶光

缺省:30分钟。
强烈建议设置比数据库超时时长少一点(MySQL的wait_timeout参数一样平常为8小时)。

idle-timeout:

一个连接idle状态的最永劫光,超时则被开释

其他参数详见:https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing

原文链接:https://mp.weixin.qq.com/s/VHjvxExJamycopGcSedlew

标签:

相关文章