跳东方舞的屈屈 發表於 2025-3-22 00:00:00

sql文件导入[ERR] 2006 - MySQL server has gone away

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>问题</li><li>原因</li><li>解决办法</li><li>如何设置和查看</li></ul></div><p>使用Navicat Premium 12导入mysql的sql文件时,导入失败,出现如下错误:2006 - MySQL server has gone away。mysql出现ERROR : (2006, &#39;MySQL server has gone away&#39;) 的问题意思就是指client和MySQL server之间的链接断开了。</p><p class="maodian"></p><h2>问题</h2><p>导入的sql文件大概有15M,导入过程中报错:2006 - MySQL server has gone away</p><p>&nbsp; &nbsp;<img src="https://zhuji.jb51.net/uploads/allimg/20240219/1-24021914162E31.png" alt="" loading="lazy" class="medium-zoom-image"/></p><p class="maodian"></p><h2>原因</h2><p>造成这样的原因 最常见的就是采集或者新旧数据转化——也就是 一般说sql操作的时间过长,或者是传送的数据太大(例如使用insert ... values的语句过长, 这种情况可以通过修改max_allowed_packed的配置参数来避免,也可以在程序中将数据分批插入(使用mysql limit进行分页,循环分批处理数据)); 应用程序(比如PHP)长时间的执行批量的MYSQL语句。执行一个SQL,但SQL语句过大或者语句中含有BLOB或者longblob字段。比如,图片数据的处理。都容易引起MySQL server has gone away。</p><p>  一 种可能是发送的SQL语句太长,以致超过了max_allowed_packet的大小,如果是这种原因,你只要修改my.cnf,加大max_allowed_packet的值即可。&nbsp;</p><p>&nbsp; &nbsp; &nbsp;还有一种可能是因为某些原因导致超时,比如说程序中获取数据库连接时采用了Singleton的做法,虽然多次连接数据库,但其实使用的都是同一个连接,而且程序中某两次操作数据库的间隔时间超过了wait_timeout(SHOW STATUS能看到此设置),那么就可能出现问题。最简单的处理方式就是把wait_timeout改大,当然你也可以在程序里时不时顺手mysql_ping()一下,这样MySQL就知道它不是一个人在战斗。&nbsp;</p><p class="maodian"></p><h2>解决办法</h2><p>&nbsp; &nbsp;1、找到MySQL安装目录下的my.ini文件,修改max_allowed_packet的大小,根据自己的sql文件的大小设置,一定要大于sql文件。</p><p>&nbsp;&nbsp; <img src="https://zhuji.jb51.net/uploads/allimg/20240219/1-24021914162B31.png" alt="" loading="lazy" class="medium-zoom-image"/></p><p>&nbsp; 也可以对wait_timeout和interactive_timeout 进行设置:</p><p>&nbsp; &nbsp;wait_timeout=288000<br/> &nbsp; &nbsp;interactive_timeout = 288000<br/> </p><p>&nbsp; &nbsp;2、修改完之后需要重启mysql服务</p><p>&nbsp; &nbsp;<img src="https://zhuji.jb51.net/uploads/allimg/20240219/1-24021914162LM.png" alt="" loading="lazy" class="medium-zoom-image"/></p><p>&nbsp;</p><p>3、重启 之后,重新导入sql文件,导入成功。</p><p>&nbsp; &nbsp; <img src="https://zhuji.jb51.net/uploads/allimg/20240219/1-24021914162G64.png" alt="" loading="lazy" class="medium-zoom-image"/></p><p>&nbsp;</p><p>interactive_timeout针对交互式连接,wait_timeout针对非交互式连接。所谓的交互式连接,即在mysql_real_connect()函数中使用了CLIENT_INTERACTIVE选项。</p><p>说得直白一点,通过mysql客户端连接数据库是交互式连接,通过jdbc连接数据库是非交互式连接。<br/> interactive_timeout:交互式连接超时时间(mysql工具、mysqldump等)<br/> wait_timeout:非交互式连接超时时间,默认的连接mysql api程序,jdbc连接数据库等</p><p class="maodian"></p><h2>如何设置和查看</h2><p>mysql&gt; show global variables like &#39;wait_timeout&#39;;&nbsp;</p><p>mysql&gt; show global variables like &#39;interactive_timeout&#39;;<br/> mysql&gt; set global interactive_timeout=1800;<br/> mysql&gt; set global wait_timeout=1800;</p><p>show variables like &#39;max_allowed_packet&#39;;</p><p><br/></p>
頁: [1]
查看完整版本: sql文件导入[ERR] 2006 - MySQL server has gone away