2013,Lost connection to MySQL server during query 报错处理

本文探讨了在使用SQLAlchemy时遇到的2013错误的三种可能原因及解决方案,包括调整MySQL超时限制、增加max_allowed_packet设置以及处理坏表问题。

转载自:https://blog.youkuaiyun.com/weixin_39561473/article/details/90213914

今天在单位改bug,有一个表总是在写入数据的时候报2013的错误

查阅了一下官方文档,总结一下3种可能性,一般都是第一或第二种原因。

 

首先SQLAlchemy官方对该错误的解释:

针对与数据库操作相关的错误而引发的异常,并且不一定在程序员的控制之下,例如, 发生意外断开连接,找不到数据源名称,无法处理事务,处理期间发生内存分配错误等。

此错误是DBAPI错误,源自数据库驱动程序(DBAPI),而不是SQLAlchemy本身。

OperationalError是驱动程序在被删除的数据库连接的上下文中使用的最常见(但不是唯一)错误类,或者无法连接到数据库。

 

原因1:备份可能达到MySQL超时限制

这里讨论的特定变量是net_read_timeout和net_write_timeout,它们分别设置为30秒和60秒。 你可以在my.cnf配置文件中根据需要设置它们来更改它们。以下是个例子。

对my.cnf进行这些更改后,必须重新启动MySQL!!!

net_read_timeout = 120
net_write_timeout = 900

更改这些设置而无需重新启动MySQL,则可以使用以下SQL语句执行此操作:

set global net_read_timeout = 120;
set global net_write_timeout = 900;

 

 

原因2:增加max_allowed_packet设置

在my.ini配置文件 mysqld 节点下添加

max_allowed_packet = 500M

配置MySQL允许的最大数据包大小,上面的500M你可以根据你的项目修改为你自己的值,只要比要导入的备份文件大就可以了。

 

原因3:可能为坏表

有时“丢失连接”错误是由损坏的表引起的。

您可以尝试设置

innodb_force_recovery = 1

重新启动mysql以查看是否有帮助。 如果是此原因,执行转储可能会修复页面缓存,你可以将其转回0或删除该配置。

<think> 嗯,用户这次问的是MySQL错误代码2013的解决方案,而且明确要求参考站内引用。从提供的引用内容来看,用户已经做过一些调研,尝试过修改net_write_timeout参数,也注意到InnoDB引擎可能存在问题(引用[1][2])。 用户可能正在执行耗时较长的查询操作,特别是在测试到60+0.5秒时触发错误(引用[1]),这个细节很重要。引用[3]提到的OS error 106(句柄无效)和aio read失败,暗示可能是异步I/O或文件系统问题。 需要组织系统性的解决方案:首先应该解决最直接的超时问题(如引用[1]的成功案例),然后处理潜在的InnoDB文件损坏(引用[2][3]),最后补充其他可能性。用户似乎更关注实操性方案,所以要把配置修改步骤写具体,比如my.ini的位置、参数单位。 特别要注意引用[2]提到的innodb_use_native_aio参数,这对Windows系统很关键。考虑到用户报错信息包含操作系统错误码,应该提醒路径检查的重要性——这个细节在常规教程里容易被忽略。 用户没有提供环境细节(比如MySQL版本或操作系统),所以需要覆盖跨平台方案。最后生成的扩展问题要帮助用户自主排查,比如当基础方案无效时可进一步验证的方向。 </think> 针对MySQL错误代码2013 "Lost connection to MySQL server during query",以下是系统性的解决方案(综合引用内容及最佳实践): ### 核心解决方案 1. **增加超时参数** ```ini [mysqld] net_write_timeout = 600 # 写操作超时时间(秒) net_read_timeout = 600 # 读操作超时时间(秒) wait_timeout = 28800 # 非交互连接超时(建议值) interactive_timeout = 28800# 交互连接超时(建议值) ``` > 修改后需重启MySQL服务(引用[1]已验证此方案有效) 2. **调整InnoDB配置**(针对存储引擎问题) ```ini [mysqld] innodb_use_native_aio = 0 # 禁用异步I/O(若出现OS error 106) innodb_buffer_pool_size = 4G # 根据内存调整(建议物理内存的50-70%) ``` > 引用[2][3]指出OS error 106可能与异步I/O相关 --- ### 进阶排查步骤 1. **检查文件系统错误** ```bash chkdsk /f C: # Windows磁盘检查(若ibdata1文件报错) fsck /dev/sdaX # Linux文件系统检查 ``` 2. **验证网络稳定性** ```sql SHOW GLOBAL STATUS LIKE 'Aborted_connects'; ``` 持续增长的数值表明存在网络中断 3. **分析大查询优化** ```sql EXPLAIN [你的复杂查询]; -- 检查全表扫描操作 SET SESSION max_execution_time = 300000; -- 单会话延长超时 ``` --- ### 其他可能原因及对策 | 原因类型 | 解决方案 | |-----------------|------------------------------| | **服务器资源不足** | 监控CPU/内存:`top`(Linux) / 任务管理器(Windows) | | **大结果集传输** | 使用`LIMIT`分页或增量获取数据 | | **防火墙中断** | 将3306端口加入白名单 | | **MySQL Bug** | 升级到最新稳定版 | > 如问题仍存在,请检查错误日志定位根源: > ```bash > # Linux > tail -f /var/log/mysql/error.log > # Windows > 查看data目录下*.err文件 > ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值