服务器为阿里云ECS
id8为当前连接,id9为内网客户端连接,id10为外网客户端连接
当9和10的time达到300秒时,分别执行show processlist刷新连接,9会成功刷新,time重新计时
而10对应的外网客户端会提示
因此得出结论外网客户端的连接空闲300秒后失效,但原因不知道是阿里云配置导致还是mariadb设置导致
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您描述的情况,外网客户端连接在空闲300秒后失效,这可能是由于几个因素导致的:
数据库服务器配置:MariaDB(或MySQL)有一个系统变量叫做 wait_timeout 或 interactive_timeout,它们分别控制非交互式和交互式连接的空闲超时时间。当一个连接在这段时间内没有活动,数据库会自动断开这个连接。您可以检查MariaDB的这两个参数设置,看看是否被设置为了300秒或者更小的时间,从而导致外网连接在空闲一段时间后被关闭。
阿里云安全组规则:虽然较为少见,但理论上如果您的ECS实例的安全组规则设置了针对外网访问的TCP连接有空闲超时限制,这也可能导致连接中断。不过,阿里云的安全组默认不会对连接活跃性进行限制,它主要关注的是端口开放与IP访问控制。
网络设备或中间件设置:如果外网连接到ECS实例之间存在其他网络设备(如负载均衡、防火墙等),这些设备也可能有各自的会话保持或空闲超时设置,影响到最终的连接稳定性。
应用程序框架或代理设置:如果您的应用使用了任何代理服务(如HAProxy、Nginx作为数据库代理),这些代理软件也可能有自己的超时设置,需要检查是否有相关的配置。
解决方法:
调整MariaDB设置:登录到MariaDB,运行如下命令查看并调整相关参数(以root用户或有足够权限的用户执行):
SHOW VARIABLES LIKE 'wait_timeout';
SET GLOBAL wait_timeout = <新值>;
SHOW VARIABLES LIKE 'interactive_timeout';
SET GLOBAL interactive_timeout = <新值>;
将 <新值> 替换为您希望的超时时间(单位为秒)。
检查网络配置:确认ECS实例的安全组规则、网络路径上的任何可能设备以及应用层代理是否有相关的超时设置,并根据需要进行调整。
监控与日志:查看ECS实例、数据库以及可能涉及的网络设备的日志,可能会提供关于连接断开的具体原因。
建议首先从数据库配置入手排查,因为这是最直接且常见的原因。如果问题依旧,再逐步深入到网络和中间件层面。