MySQL报错导入数据报错[ERR]2006 - MySQL server has gone away,出现这个问题,大概有几个原因

1. MySQL服务器挂掉了

  • 可以去看MySQL的日志验证,这个可能性不大,也没有遇到过,暂时跳过。

2. MySQL请求被主动kill干掉

  • 这个一般都是人为操作的kill,也可以跳过

3. MySQL连接超时

  • MySQL长连接很久没有新的请求发起,MySQL server端发现长期没有接到新的请求,主动关闭了连接。之后再通过这个连接发起请求的时候,就会报错。
  • 查看wait_timeout的值。
1
2
3
4
5
6
7
mysql> show global variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 28800 |
+---------------+-------+
1 row in set (0.00 sec)
  • 可以看到超时时间是28800秒,即MySQL的链接在无操作28800秒后会被自动关闭。可以修改该数据。
    1
    set global wait_timeout=28801;

4. 传送的数据太大,例如使用insert语句过长,这种情况可以通过修改max_allowed_packed的配置参数来避免。

  • 查看max_allowed_packet的值。
1
2
3
4
5
6
7
mysql> show global variables like 'max_allowed_packet';
+--------------------+----------+
| Variable_name | Value |
+--------------------+----------+
| max_allowed_packet | 67108864 |
+--------------------+----------+
1 row in set (0.00 sec)
  • 可以看到最大是允许64M的数据,可以修改成自己需要的值。
1
set global max_allowed_packet=134217728;
  • 注意:通过在命令行中进行设置只对当前有效,重启MySQL服务之后则会恢复默认值。