mysql 的连接10来分钟左右自动断开

mysql 的连接10来分钟左右自动断开

    • 测试环境
    • 问题描述
    • 相关配置
    • 解决方法

测试环境

CentOS 6.5
Mysql 5.7

问题描述

项目启动,第一次连接成功初始化连接池,连接无问题,无任何操作大概10几分钟的样子,连接池的连接全部失效,

报异常:

Connection is not available, request timed out after 30034ms.
No operations allowed after connection closed.

mysql 查看进程 SHOW PROCESSLIST 初始化的10个连接全部处于sleep状态(因为未到wait_time,所以没释放),

但是hikaricp 连接不上初始化时创建的那10个连接

在本地虚拟机安装mysql,局域网内测试,却不会出现此问题,猜测是否为路由器的某些原因直接断掉了?

下图为内网环境,60秒前的为初始化连接时收发的包,1692秒后的为无操作之后重新进行操作收发的包,内网无异常

相关配置

mysql 的 wait_timeout 默认值8小时

hikaricp 配置 maxLifetime: 5400000,其余保持默认(官方推荐配置是比 wait_timeout 少几秒钟,试过了,与此值在此问题上无差异),默认最大10个连接,最小与最大默认相同,即为固定连接数的连接池

另外,尝试过配置 maxLifetime: 540000,异常就不出现了,但是9分钟太短了,不配合更改wati_timeout的话,会导致mysql有非常多sleep的连接。

解决方法

配置/etc/sysctl.conf 如下:
net.ipv4.tcp_keepalive_intvl=15
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_time = 300
然后执行 sysctl -p

net.ipv4.tcp_keepalive_time,这个值并非一成不变,一个内网环境通过端口映射的服务器,本地服务器最多设置为120秒,云服务器的则可以300

你可能感兴趣的:(mysql,mysql,centos,数据库,linux)