开发避坑指南(60):Mysql导入数据报错ERROR 2006 (HY000) MySQL server has gone away解决方案
问题
使用mysql命令行导入sql大文件的报错:
ERROR 2006 (HY000): MySQL server has gone away
解决方案
执行以下命令临时修改非交互式连接前等待活动的秒数、服务器关闭交互式连接前的空闲等待时间、服务器和客户端之间通信数据包的最大容量。再执行导入命令。
SET GLOBAL wait_timeout = 28800; -- 例如,设置为8小时
SET GLOBAL interactive_timeout = 28800;
SET GLOBAL max_allowed_packet=1073741824; -- 例如,设置为1GB
参数说明:
wait_timeout参数
wait_timeout是MySQL服务器关闭非交互式连接前等待活动的秒数,默认值为28800秒(8小时)。当客户端通过非交互方式(如JDBC连接)建立连接后,若在该时间内无操作,服务器会自动断开连接以释放资源。该参数可通过SET GLOBAL临时修改全局值,但需重启服务或修改配置文件(如my.cnf)才能永久生效。
interactive_timeout参数
interactive_timeout控制服务器关闭交互式连接(如命令行客户端)前的空闲等待时间,默认同样为28800秒。其生效条件取决于客户端是否使用CLIENT_INTERACTIVE选项连接。需注意,当两者同时设置时,交互式连接会优先采用interactive_timeout的值。修改方式与wait_timeout类似,需区分会话级和全局级作用域。
max_allowed_packet参数
max_allowed_packet限制MySQL服务器和客户端之间通信数据包的最大容量,默认通常为4MB-16MB,最大可设为1GB(1073741824字节)。该参数主要用于处理大字段插入、批量操作或主从复制时可能出现的包大小超限错误(如ERROR 2006)。通过SET GLOBAL可临时调整,但永久生效需修改配置文件并重启服务。