mysql away_MySQL server has gone away报错原因分析
在执行一个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报错原因分析相关推荐
- mysql 长连接 has gone away_MySQL server has gone away报错原因分析/
在平时和开发的交流 以及 在论坛回答问题的或称中会发现这个问题被问及的频率非常高. 程序中报错: MySQL server has gone away 是什么意思? 如何避免? 因此,感觉有必要总结一 ...
- MySQL server has gone away报错原因分析及解决办法
原因1. MySQL 服务宕了 判断是否属于这个原因的方法很简单,执行以下命令,查看mysql的运行时长 $ mysql -uroot -p -e "show global status l ...
- MySQL server has gone away报错原因分析
原因1. MySQL 服务宕了 判断是否属于这个原因的方法很简单,执行以下命令,查看mysql的运行时长 $ mysql -uroot -p -e "show global status l ...
- MySQL Server has gone away报错原因汇总
原因一: MySQL 服务宕了 判断是否属于这个原因的方法很简单,执行以下命令,查看mysql的运行时长: $ mysql -uroot -p -e "show global status ...
- pandas.read_csv() 报错 OSError: Initializing from file failed,报错原因分析和解决方法
今天调用pandas读取csv文件时,突然报错" OSError: Initializing from file failed ",我是有点奇怪的,以前用的好好的,read_csv ...
- CodeBlocks报错原因分析:找不到编译器 / th_en_US.idx' not found! 提示
找不到编译器解决方法 新装了一个CodeBlocks,无法运行程序,报错如下: Project/Target: "ACM1 - Debug":The compiler's setu ...
- 【解决报错原因分析】画图plt.contourf(X,Y,Z)报错TypeError: unhashable type: ‘numpy.ndarray‘(含详细示例讲解)
今天简化画图代码的时候发现了很奇怪的报错现象,经过一系列尝试找到了根源,希望帮助后来人,主要问题出现在如下语句中(为了体现问题.方便比对,特意在这改变了x为xx,如果你不想看这冗长的示例,可以直接按照 ...
- vector在类内定义vector<int> vec(10,0); 报错原因分析
注意使用的过程中别忘记: 添加头文件#include < vector >, 添加命名空间 using namespace std. 常用的函数的定义格式介绍: vector 类成员变量的 ...
- g++编译报错原因分析 makefile : *** commands commence before first target. stop.
在编译linux C++代码时出现了makefile :70: *** commands commence before first target. stop. 经过检查发现,原因是修改makefil ...
最新文章
- $(document).ready(function() {})不执行的问题
- @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
- 手把手教你Axure-基本工具栏
- 分布式面试 - zookeeper 都有哪些使用场景?
- 《『若水新闻』客户端开发教程》——04.设计新闻分类UI(2)
- Java与数据库 —— JDBC标准
- 实现excel导入_PhpOffice实现Excel表格导入的解耦方法
- java 文件流的帮助类
- lvs的dr和nat模式配置备忘
- python中0x3f_Python学习笔记(一):基本数据类型
- 目标检测的图像特征提取之(三)Haar特征
- 微信小程序点击图片放大
- python 画图十大工具_python实现画图工具
- 常用git命令指南总结
- vue功能-数字键盘
- mysql server has gone away_mysql server has gone away的解决方法
- 《指弹:Dream Catcher》
- winpe修复计算机无法启动,巧用PE修复系统启动故障
- RFID电子标签打印机如何维护
- 【新2023Q2模拟题JAVA】华为OD机试 - 预订酒店