在平时和开发的交流 以及 在论坛回答问题的或称中会发现这个问题被问及的频率非常高。

程序中报错: MySQL server has gone away 是什么意思? 如何避免?

因此,感觉有必要总结一下发生这个问题的原因。今天正好看到一篇外文blog总结的比较好,就翻译过来了

原因1. MySQL 服务宕了

判断是否属于这个原因的方法很简单,执行以下命令,查看mysql的运行时长

$ mysql -uroot -p -e "show global status like 'uptime';"

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

| Variable_name | Value |

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

| Uptime | 68928 |

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

1 row in set (0.04 sec)

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

$ tail /var/log/mysql/error.log

130101 22:22:30 InnoDB: Initializing buffer pool, size = 256.0M

130101 22:22:30 InnoDB: Completed initialization of buffer pool

130101 22:22:30 InnoDB: highest supported file format is Barracuda.

130101 22:22:30 InnoDB: 1.1.8 started; log sequence number 63444325509

130101 22:22:30 [Note] Server hostname (bind-address): '127.0.0.1'; port: 3306

130101 22:22:30 [Note] - '127.0.0.1' resolves to '127.0.0.1';

130101 22:22:30 [Note] Server socket created on IP: '127.0.0.1'.

130101 22:22:30 [Note] Event Scheduler: Loaded 0 events

130101 22:22:30 [Note] /usr/sbin/mysqld: ready for connections.

Version: '5.5.28-cll' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Server (GPL)

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

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

2. 连接超时

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

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

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

$ mysql -uroot -p -e "show global variables like '%timeout';"

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

| Variable_name | Value |

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

| connect_timeout | 30 |

| 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 |

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

mysql> SET SESSION wait_timeout=5;

## Wait 10 seconds

mysql> SELECT NOW();

ERROR 2006 (HY000): MySQL server has gone away

No connection. Trying to reconnect...

Connection id: 132361

Current database: *** NONE ***

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

| NOW() |

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

| 2013-01-02 11:31:15 |

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

1 row in set (0.00 sec)

3. 进程在server端被主动kill

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

$ mysql -uroot -p -e "show global status like 'com_kill'"

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

| Variable_name | Value |

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

| Com_kill | 0 |

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

4. Your SQL statement was too large.

当查询的结果集超过 max_allowed_packet 也会出现这样的报错。定位方法是打出相关报错的语句。

用select * into outfile 的方式导出到文件,查看文件大小是否超过 max_allowed_packet ,如果超过则需要调整参数,或者优化语句。

mysql> show global variables like 'max_allowed_packet';

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

| Variable_name | Value |

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

| max_allowed_packet | 1048576 |

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

1 row in set (0.00 sec)

修改参数:

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

mysql> show global variables like 'max_allowed_packet';

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

| Variable_name | Value |

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

| max_allowed_packet | 16777216 |

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

1 row in set (0.00 sec)

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

  1. 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.上 ...

  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. php mysql长连接聊天室_PHP之探索MySQL 长连接、连接池

    PHP连接MysqL的方式,用的多的是MysqL扩展.MysqLi扩展.pdo_MysqL扩展,是官方提供的.PHP的运行机制是页面执行完会释放所有该PHP进程中的所有资源的,如果有多个并发访问本地的 ...

  6. mysql ping 长连接超时时间_mysql_ping与mysql长连接(部分摘录) | 学步园

    mysql_ping与mysql长连接 今天有大收获.最近开发的一个系统,后台用的线程池来处理请求,而每个线程池持有一个mysql连接.这个程序有时候会莫名其妙的死掉,好像是在操作数据库的时候.由于出 ...

  7. 记录一次吃力的探索过程【Thinkphp搭建Mysql长连接并重用】

    使用Thinkphp搭建服务器后,进行ab测试发现并发性能几乎为0.-c参数设置为1和2,8,每秒完成请求都只有0.9左右. 于是打开mysql全局日志一看,我的乖乖,一个http请求就connect ...

  8. 苹果cms安装mysql检测失败_maccms(苹果cms)采集过程报错--MySQL server has gone away错误的解决办法...

    maccms(苹果cms)采集过程报错--MySQL server has gone away,造成这样的原因一般是sql操作的时间过长,或者是传送的数据太大(例如使用insert ... value ...

  9. java连接 mdx,olap4j连接sap hana的xmla服务mdx查询报错【已解决】

    olap4j连接sap hana的xmla服务mdx查询报错[已解决] 各位大神,求指教~~我在java中通过olap4j连接上了sap hana的xmla xs 服务,通过mdx查询hana中的数据 ...

最新文章

  1. 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 )
  2. Tesla对德国政府的审批流程表示受够了
  3. 测试监控系列:使用vb批量统计nmon结果
  4. Effective C++条款7:为多态基类声明virtual析构函数
  5. 深度学习:神经风格转移
  6. ViBe算法原理及Matlab实现
  7. 阿里云服务器ping不通github或其他域名
  8. EXCEL 小tips
  9. 海康ISAPI透传ftp
  10. IIS ftp服务器的搭建
  11. Codeforces 821B Okabe and Banana Trees 题解
  12. SQLExceptioncom.mysql.jdbc.SQLError in createSQLException Incorrect string value: '\xF0\x9F\x99\x8F'
  13. 在Jetson Nano上安装RTL8821cu驱动
  14. 阿里大数据之路:数据管理篇大总结
  15. 一元二次方程ax2+bx+c=0的解
  16. 高中数学公式总结:解析几何(非常全)
  17. 错误解决:Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255]
  18. NYOJ-72-Financial Management-2013年10月12日14:58:32
  19. 在C#中使用Ribbon界面(一)——创建一个Ribbon窗口
  20. android找不到 windows 7 共享无线网络连接,Windows 7下wifi共享上网设置教程 没有无线路由器也能用wifi...

热门文章

  1. away3d 4.0.9Gold 学习笔记 加载方法总结(4)
  2. 纽约时报:昔日王者Digg能否实现中兴?【独家】
  3. lucene学习之helloworld(简单实例)
  4. awk嵌套awk_与AWK一起喝咖啡
  5. devops最佳实践_DevOps最佳实践如何改善团队动力
  6. 涉足荒野script_为什么社区经理必须涉足(而不是潜入)社区
  7. (10)vue.js 指令(2)
  8. JavaScript的三大高阶函数
  9. MySQL SQL语句知识点总结
  10. jQuery源码分析 Sizzle选择器