ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Mysql 客户端常见异常分析

2022-01-28 12:58:00  阅读:221  来源: 互联网

标签:mysql 常见 read timeout Mysql net 超时 连接 客户端


SocketTimeoutException

jdbc timeout包括Transaction Timeout/Statement Timeout/connectTimeout/socketTimeout四种类型,详细解释可见Jdbc & Mysql timeout分析

如果与服务器连接成功,即开始数据传输。如果服务器处理数据用时过长,超过了socketTimeout,就会抛出SocketTimeOutExceptin,即服务器响应超时

建议在jdbc url param中显示配置connectTimeout/socketTimeout,有效控制MySQL处理时间,并释放连接

jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&connectTimeout=3000&socketTimeout=5000

CommunicationsException

若发生 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 异常,为数据库连接失效,但是失效的原因可能会有多种,大致都与 mysql 各种 timeout 参数相关

EOFException

net_write_timeout 控制 mysql server向客户端写数据超时时间。若客户端建立连接后,超过该时间MySQL仍未写完数据,则会抛出EOFException

java.io.EOFException: Can not read response from server. Expected to read 34328 bytes, read 433 bytes before connection was unexpectedly lost.

SocketException

jdbc连接会根据 mysql wait_timeout 检测空闲连接。若在 wait_timeout 时间内,连接还是空闲状态,mysql server将会断开这个链接。

MySQL建立连接成功后,MySQL主动断开连接,底层异常却为java.net.SocketException: Software caused connection abort: recv failed

RecoverableDataAccessException

使用了已断开的MySQL连接,会抛出org.springframework.dao.RecoverableDataAccessException

附表(MySQL timeout参数)

SHOW VARIABLES LIKE '%timeout%';可查看MySQL timeout参数

参数描述功能
connect_timeout连接响应超时时间服务器端在这个时间内如未连接成功,则会返回连接失败。
wait_timeout连接空闲超时时间与服务器端无交互状态的连接,直到被服务器端强制关闭而等待的时间。可以认为是服务器端连接空闲的时间,空闲超过这个时间将自动关闭
interactive_timeout连接空闲超时时间与服务器端无交互状态的连接,直到被服务器端强制关闭而等待的时间。
net_read_timeout数据读取超时时间在终止读之前,从一个连接获得数据而等待的时间秒数;当服务正在从客户端读取数据时,net_read_timeout控制何时超时。即客户端执行数据读取,等待多少秒仍未执行成功时自动断开连接。
net_write_timeout数据库写超时时间和net_read_timeout意义类似,在终止写之前,等待多少秒把block写到连接;当服务正在写数据到客户端时,net_write_timeout控制何时超时。
slave-net-timeout从库延后同步的时间当slave认为连接master的连接有问题时,就等待N秒,然后断开连接,重新连接master

interactive_timeoutwait_timeout意义虽然相同,但是有使用对象有本质的区别。interactive_timeout针对交互式连接(比如通过mysql客户端连接数据库),wait_timeout针对非交互式连接(比如一般在PHP中使用PDO连接数据库,当然你可以设置CLIENT_INTERACTIVE选项来改变)。所谓的交互式连接,即在mysql_real_connect()函数中使用了CLIENT_INTERACTIVE选项。

  • slave-net-timeout在主从同步时从库上起作用;
  • connect_timeout:在获取连接阶段起作用;
  • interactive_timeoutwait_timeout:在连接空闲阶段起作用;
  • net_read_timeoutnet_write_timeout:则是在连接执行时起作用。

参考文档:

  1. JDBC未设置socket超时导致应用程序的线程池阻塞
  2. 数据库相关异常分析

标签:mysql,常见,read,timeout,Mysql,net,超时,连接,客户端
来源: https://blog.csdn.net/why_still_confused/article/details/122722878

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有