首页 > 数据库 >MySQL数据库连接超时

MySQL数据库连接超时

时间:2024-05-15 14:30:40浏览次数:25  
标签:重传 数据库 SYN TCP tcp MySQL 超时 连接

应用日志报错,应用反馈频繁连接超时,导致应用无法正常提供服务。

 

可能的问题原因如下:

  1. 数据库timeout参数设置不合理
  2. 数据库连接串设置有误
  3. 连接池配置不是最佳实践或者连接池满
  4. 网络波动
  5. 防火墙策略异常
  6. 数据库压力大导致响应缓慢
  7. 数据库连接达到上限
  8. 未知原因

处理过程:

  • 检查数据库状态,排除1,6,7
    数据库连接数未达到上限;数据库压力很低;timeout设置600秒(全司标准配置),error count;
  • 检查应用连接串,排除2
    jdbc:mysql://ip:port/dbname?
    useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&autoReconnect=true&failOverReadOnly=false&connectTimeout=3000&socketTimeout=10000
  • 检查连接池,排除3
    max,min配置合理,并且active未达到max。1分钟探测一次idle,超过5分钟的idle会话,回收连接池连接。配合MySQL error日志,未看MySQL主动断开空闲连接的相关报错。
  • 检查网络。排除4,5
    网络反馈网络无波动、防火墙配置正常。

经过各个专业组排查,都反馈无问题。目前分析下只有一个原因:超出认知范围内的未知原因
实践是检验真理的唯一标准!
减少影响因素,逐步缩小故障范围。
1、因应用跟数据库不同网段,通过jdbc短连接的方式在应用服务器上、以及数据库同网段服务器进行探活测试。
测试结果:数据库同网段探活无报错,应用测探活有报错。
结论:数据库无问题、连接池无问题
2、因应用是k8s部署,屏蔽k8s影响,将一台应用服务器剥离k8s集群,继续进行测试。
测试结果:应用探活无报错。
结论:网络策论、防火墙配置等无问题,可能k8s有问题(k8s为项目组私有部署,不是司内标准服务)。
3、网络抓包:在pod所在宿主机跟数据库主机之间进行抓包。
测试结果:SYN重传,第三次握手被重传了,重传的SYN没有收到服务器端的ACK确认。
结论:1、应用服务器SYN重传。2、数据库服务器端不响应重传的SYN!

测试结果导向:当k8s开启后,会向数据库重复发送tcp请求,数据库主机会屏蔽这些重复的tcp请求。
经过查资料发现:
一、服务端在什么情况下会不响应重传SYN--->当开启下面两个参数时,服务端会检查TCP连接报文的时间戳,当收到相同IP的的请求时,时间戳小于当前已经建立的TCP连接的时间戳时,会丢弃该请求。
数据库主机配置了如下参数,用户快速回收TCP连接。防止高并发下服务器端挤压大量TCP连接TIME_WAIT的socket。
net.ipv4.tcp_timestamps=1 ##3.x内核默认配置,校验TCP报文的时间戳
net.ipv4.tcp_tw_recycle=1 ##开启TCP连接中TIME_WAIT socket快速回收

当net.ipv4.tcp_timestamps默认开启,net.ipv4.tcp_tw_recycle默认关闭。当这两个参数都开启后,会激活TCP的如下行为:
TCP可以缓存每个主机最新的时间戳,后续请求中如果时间戳小于缓存的时间戳,即视为无效,相应的数据包会被丢弃。

二、客户端为什么会有重传SYN现象
客户端是k8s容器,容器内的tcp请求,会使用NAT进行转换,转换成宿主机的物理IP后,再与数据库通信。而在NAT转换时,会造成TCP请求的时间戳不是递增的。这就造成了“SYN”重传现象。

结合以上两点,可以从理论上判断出应用服务器连接超时现象的原因。
解决方案:
数据库服务器设置如下参数。
net.ipv4.tcp_timestamps=0
net.ipv4.tcp_tw_recycle=0

我们将数据库服务器的参数关闭后,应用服务器不再发生连接失败现象。

标签:重传,数据库,SYN,TCP,tcp,MySQL,超时,连接
From: https://www.cnblogs.com/z-uncle/p/18193530

相关文章

  • MySQL 给用户添加 ALTER VIEW 的权限
    本文分享自华为云社区《MySQL给用户添加ALTERVIEW的权限》,作者:皮牙子抓饭。MySQL是一个广泛使用的关系型数据库管理系统,用于许多Web应用程序和企业级解决方案中。在MySQL中,用户权限的管理是非常重要的,以确保数据库安全性和数据完整性。在某些情况下,需要为用户添加特定......
  • mysql
    Mysql目录目录Mysqlmysql8.0.12winx64详细安装教程linuxmysql教程在Linux远程连接笔记中JDBC安装、使用JDBC安装JDBC使用三种执行对象:用于将SQL语句发送到数据库中createStatementStatementcreateStatement()创建一个Statement对象来将SQL语句发送到数据库。Statemen......
  • ubuntu linux安装MySQL后遇到的一些问题和解决方法
    Ubuntulinux安装MySQL后遇到的一些问题和解决方法版本信息ubuntu:Ubuntu24.04mysql:Ver8.0.36-2ubuntu3forLinuxonx86_64((Ubuntu))登陆安装后直接sudomysql就可以登陆分析为什么可以不用sudomysql-uroot-p呢?原因有三点直接执行mysql命令它是可以根据......
  • 达梦数据库安装
    前言:达梦数据库使用Redhat 红帽则是一家成立于1993年的软件公司,致力于为企业提供基于Linux内核的操作系统和开源解决方案。红帽采用了商业模式,通过销售许可证、技术支持和相关服务来盈利。红帽将Linux内核与自家开发的软件进行整合,并提供稳定性强、安全性高以及专业技术支......
  • mysql基于linux环境下修改用户密码
    一、忘记密码的情况下:1、找到数据库配置文件my.cnf,不记得在哪可以全局搜索find/-name‘*my.cnf*’;2、vimy.cnf,在[mysqld]下面添加一行skip-grant-tables取消权限验证,保存退出;3、重启数据库:systemctlrestartmysql,也有可能是servicemysqldrestart;4、找到mysql安装目录,......
  • Mysql 之explain索引效率分析
    一、explain语句EXPLAIN[EXTENDED]SELECTselect_options二、字段分析1、idselect识别符。这是select的查询序列号,id的值越大优先级别越高,越先被执行,如果id相同,执行顺序右上至下2、select_typeselect_type表示select语句的类型。3、table表示这一行的数据是关于哪张......
  • openGauss\postgreSQL数据库性能查看
    1.查看系统CPU使用率sar-u-f/var/log/sa/sa27(sa27根据时间变化,sa27是27号信息的记录)结果输出:15时52分01秒CPU%user%nice%system%iowait%steal%idle15时53分01秒all0.320.000.690.000.0098.9915时54分01秒all0.300.000.680.000.0099.0215时55......
  • docker搭建Elasticsearch、Kibana、Logstash 同步mysql数据到ES
    一、前言在数据量大的企业级实践中,Elasticsearch显得非常常见,特别是数据表超过千万级后,无论怎么优化,还是有点力不从心!使用中,最首先的问题就是怎么把千万级数据同步到Elasticsearch中,在一些开源框架中知道了,有专门进行同步的!那就是Logstash。在思考,同步完怎么查看呢,这时Kibana映入......
  • mysql+node.js前后端交互(简单实现注册登录功能)
    目录 sql文件 user.js注册部分  登录部分 对应的表操作usersql.js result.js用户提交的信息会进行格式化 ......
  • 2.集成MySQL及Redis
    连接MySQL将刚才复制的代码放在app创建后并运行文件根据警告提示复制内容根据SQLAlchemy()中的__init__()中的init_app()也可以得知没有以上内容将会警告,所以得注意代码顺序连接Redis为方便后期更换我们和Mysql一样将配置信息写入配置类通过类属性的方法使用......