在执行一个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. $(document).ready(function() {})不执行的问题
  2. @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  3. 手把手教你Axure-基本工具栏
  4. 分布式面试 - zookeeper 都有哪些使用场景?
  5. 《『若水新闻』客户端开发教程》——04.设计新闻分类UI(2)
  6. Java与数据库 —— JDBC标准
  7. 实现excel导入_PhpOffice实现Excel表格导入的解耦方法
  8. java 文件流的帮助类
  9. lvs的dr和nat模式配置备忘
  10. python中0x3f_Python学习笔记(一):基本数据类型
  11. 目标检测的图像特征提取之(三)Haar特征
  12. 微信小程序点击图片放大
  13. python 画图十大工具_python实现画图工具
  14. 常用git命令指南总结
  15. vue功能-数字键盘
  16. mysql server has gone away_mysql server has gone away的解决方法
  17. 《指弹:Dream Catcher》
  18. winpe修复计算机无法启动,巧用PE修复系统启动故障
  19. RFID电子标签打印机如何维护
  20. 【新2023Q2模拟题JAVA】华为OD机试 - 预订酒店

热门文章

  1. 三分钟教会你Linux网卡安装
  2. MetisMenu : Jquery + CSS 实现可隐藏的二级侧边栏导航
  3. 全方位剖析苹果竞价广告(ASM)ASO,助你玩好APP推广
  4. chatgpt赋能python:Python如何发送消息到微信群?一步步教你实现
  5. Eclipse各种小图标的含义
  6. 4.5G引爆企业通信,电力行业首当其冲
  7. 1GB的Win10来了!老电脑用户的福音
  8. WWN   ZONE的创建
  9. BLE开发 Nordic nRF52832(二) BLE简介与虚拟串口传输实现
  10. jieba分词textrank算法