问题背景
业务需求需要导mysql数据库,使用mysqldump报错:Error 2013: Lost connection ,显示连接丢失。
Error 2013: Lost connection to MySQL server during query when dumping table `mng_fdbk_reply` at row: 444087
错误分析
通过报错信息Error 2013的意思是在备份某张表的时候丢失连接
搜索网上是否有人遇到同样的问题,大部分的解释都是调整net_write_timeout参数的值,但是备份是本地备份为什么会出现超时?
数据发送到客户端的步骤是获取的数据写入到net_buffer,net_buffer写满之后,发送到网络接口的socket send buffer网络栈,然后在写到磁盘文件。
网上大部分的解决方法是调整net_write_timeout和net_read_timeout的值,从默认的60,30调大,然后进行备份,备份完成之后,再把该值调整回默认值。
在sql命令行里面设置临时全局生效用类似如下命令:
SHOW GLOBAL VARIABLES LIKE '%timeout%';
SET GLOBAL net_read_timeout = 120;
SET GLOBAL net_write_timeout = 240;
net_read_timeout :数据读取超时时间。在终止读之前,从一个连接获得数据而等待的时间秒数;当服务正在从客户端读取数据时,net_read_timeout控制何时超时。即客户端执行数据读取,等待多少秒仍未执行成功时自动断开连接。
net_write_timeout:数据库写超时时间。和net_read_timeout意义类似,在终止写之前,等待多少秒把block写到连接;当服务正在写数据到客户端时,net_write_timeout控制何时超时。
这两个参数只对TCP/IP链接有效,分别是数据库等待接收客户端发送网络包和发送网络包给客户端的超时时间,这是在Activity状态下的线程才有效的参数。
原文链接:https://blog.csdn.net/xiaozuo2011925/article/details/107787168