在执行一个sql文件时mysql -h 127.0.0.1 -uroot study -e"source b.sql",报错MySQL server has gone away。上网查解决办法,按照网上的解决方法一步步操作,最终找到原因并且解决了,觉得有必要总结下这个问题发生的原因及解决办法,避免后面再继续踩坑。

情况1. MySQL服务宕机

执行以下命令,查看mysql的运行时长。

mysql> show global status like 'uptime';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| Uptime | 10170 |

+---------------+-------+

uptime数值很大,表明mysql服务运行很久,说明最近MySQL服务器没有重启过。

或者查看MySQL的报错日志,看看有没有重启的信息。

datou:~$ tail /var/log/mysql/error.log

170914 19:44:37 InnoDB: Completed initialization of buffer pool

170914 19:44:37 InnoDB: highest supported file format is Barracuda.

170914 19:44:37 InnoDB: Waiting for the background threads to start

170914 19:44:38 InnoDB: 5.5.57 started; log sequence number 58681764

170914 19:44:38 [Note] Server hostname (bind-address): '127.0.0.1'; port: 3306

170914 19:44:38 [Note] - '127.0.0.1' resolves to '127.0.0.1';

170914 19:44:38 [Note] Server socket created on IP: '127.0.0.1'.

170914 19:44:38 [Note] Event Scheduler: Loaded 0 events

170914 19:44:38 [Note] /usr/sbin/mysqld: ready for connections.

Version: '5.5.57-0ubuntu0.14.04.1' socket: '/var/run/mysqld/mysqld.sock' port: 3306 (Ubuntu)

如果日志没有相关信息,也表明mysql服务最近没有重启过,可以继续检查下面几项情况。

情况2. 连接超时

如果程序使用的是长连接,则这种情况的可能性会比较大。

即,某个长连接很久没有新的请求发起,达到了server端的timeout,被server强行关闭。

此后再通过这个connection发起查询的时候,就会报错server has gone away。

mysql> show global variables like '%timeout';

+----------------------------+----------+

| Variable_name | Value |

+----------------------------+----------+

| connect_timeout | 10 |

| delayed_insert_timeout | 300 |

| innodb_lock_wait_timeout | 50 |

| innodb_rollback_on_timeout | OFF |

| interactive_timeout | 28800 |

| lock_wait_timeout | 31536000 |

| net_read_timeout | 30 |

| net_write_timeout | 60 |

| slave_net_timeout | 3600 |

| wait_timeout | 28800 |

+----------------------------+----------+

10 rows in set (0.00 sec)

如下命令设置连接超时为5秒。

mysql> SET SESSION wait_timeout=5;

Query OK, 0 rows affected (0.00 sec)

再执行SELECT NOW();,通过这个connection发起查询的时候,就会报错server has gone away。

mysql> SELECT NOW();

ERROR 2006 (HY000): MySQL server has gone away

No connection. Trying to reconnect...

Connection id: 41

Current database: study

+---------------------+

| NOW() |

+---------------------+

| 2017-09-14 23:12:53 |

+---------------------+

1 row in set (0.01 sec)

实际上wait_timeout=28800,不是造成文章开头的原因。

情况3. 进程在server端被主动kill

这种情况和情况2相似,只是发起者是DBA或者其他job。发现有长时间的慢查询执行kill xxx导致。

mysql> show global status like 'com_kill';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| Com_kill | 0 |

+---------------+-------+

1 row in set (0.00 sec)

情况4. Your SQL statement was too large.

当查询的结果集超过 max_allowed_packet 也会出现这样的报错。

查看执行SQL执行文件大小是否超过 max_allowed_packet ,如果超过则需要调整参数,或者优化语句。

mysql> show global variables like 'max_allowed_packet';

+--------------------+----------+

| Variable_name | Value |

+--------------------+----------+

| max_allowed_packet | 16777216 |

+--------------------+----------+

1 row in set (0.00 sec)

计算发现SQL执行文件最大只能是16M,而文章开头执行的a.sql有24M。

修改参数,max_allowed_packet 调整为28M。

mysql> set global max_allowed_packet=1024*1024*28;

Query OK, 0 rows affected (0.00 sec)

mysql> show global variables like 'max_allowed_packet';

+--------------------+----------+

| Variable_name | Value |

+--------------------+----------+

| max_allowed_packet | 29360128 |

+--------------------+----------+

1 row in set (0.00 sec)

重新再执行`mysql -h 127.0.0.1 -uroot study -e"source b.sql"``成功,说明原因是情况4造成的。

mysql away_MySQL server has gone away报错原因分析相关推荐

  1. mysql 长连接 has gone away_MySQL server has gone away报错原因分析/

    在平时和开发的交流 以及 在论坛回答问题的或称中会发现这个问题被问及的频率非常高. 程序中报错: MySQL server has gone away 是什么意思? 如何避免? 因此,感觉有必要总结一 ...

  2. MySQL server has gone away报错原因分析及解决办法

    原因1. MySQL 服务宕了 判断是否属于这个原因的方法很简单,执行以下命令,查看mysql的运行时长 $ mysql -uroot -p -e "show global status l ...

  3. MySQL server has gone away报错原因分析

    原因1. MySQL 服务宕了 判断是否属于这个原因的方法很简单,执行以下命令,查看mysql的运行时长 $ mysql -uroot -p -e "show global status l ...

  4. MySQL Server has gone away报错原因汇总

    原因一: MySQL 服务宕了 判断是否属于这个原因的方法很简单,执行以下命令,查看mysql的运行时长: $ mysql -uroot -p -e "show global status ...

  5. pandas.read_csv() 报错 OSError: Initializing from file failed,报错原因分析和解决方法

    今天调用pandas读取csv文件时,突然报错" OSError: Initializing from file failed ",我是有点奇怪的,以前用的好好的,read_csv ...

  6. CodeBlocks报错原因分析:找不到编译器 / th_en_US.idx' not found! 提示

    找不到编译器解决方法 新装了一个CodeBlocks,无法运行程序,报错如下: Project/Target: "ACM1 - Debug":The compiler's setu ...

  7. 【解决报错原因分析】画图plt.contourf(X,Y,Z)报错TypeError: unhashable type: ‘numpy.ndarray‘(含详细示例讲解)

    今天简化画图代码的时候发现了很奇怪的报错现象,经过一系列尝试找到了根源,希望帮助后来人,主要问题出现在如下语句中(为了体现问题.方便比对,特意在这改变了x为xx,如果你不想看这冗长的示例,可以直接按照 ...

  8. vector在类内定义vector<int> vec(10,0); 报错原因分析

    注意使用的过程中别忘记: 添加头文件#include < vector >, 添加命名空间 using namespace std. 常用的函数的定义格式介绍: vector 类成员变量的 ...

  9. g++编译报错原因分析 makefile : *** commands commence before first target. stop.

    在编译linux C++代码时出现了makefile :70: *** commands commence before first target. stop. 经过检查发现,原因是修改makefil ...

最新文章

  1. linux集群无密码访问,Linux服务器集群通过SSH无密码登录
  2. linux下查看文件夹的大小
  3. java获取response数据_Java中实现Http请求并获取响应数据
  4. 编码规范 | Java函数优雅之道(上)
  5. Spring Boot使用layui的字体图标时无法正常显示 解决办法
  6. asp.net免费网站三剑客:WebMatrix + MojoPortal + SQLCE
  7. 查询SQL最近一次启动时间
  8. Android Studio实现简单的图书馆订座系统
  9. 手撸CAPL(二)——OSEK网络管理N个节点建环机制(包含节点建环/丢失/跳过等)代码自取
  10. 直流电机调速仿真作业
  11. 六十星系之14廉贞贪狼坐巳亥
  12. 普华集团翟山鹰:金融激荡30年 深度洞察金融的“奥秘”
  13. Papervision3D材质
  14. Js高级-函数的理解
  15. 回忆童年游戏之棋盘决奕
  16. SpringBoot整合email
  17. FPN:feature pyramid networks for object detection
  18. component组件中的is属性居然有大用?
  19. seque Pro 每次打开都会提示错误
  20. Win32汇编环境配置

热门文章

  1. 基于matlab的双人赛艇划桨动力学数值仿真分析——详细版
  2. Minio分布式集群搭建部署
  3. 接收base64编码解码,并保存图片
  4. java web前端_JavaWeb前端: JavaScript 简介
  5. oracle 11g安装时,先决条件检查项提示environment variable:PATH 失败
  6. Intel史上最能超频的10款CPU
  7. 超高频RFID标签无源传感的发展和特点
  8. android 前摄屏幕补光,前后800万摄像头/配前置补光灯_富可视 M2_手机Android频道-中关村在线...
  9. Codeforces Global Round 1 D - Jongmah(dp)
  10. 网络编程——基本名词术语解析