mysql server has gone away的原因
之前遇到开发询问“mysql server has gone away”的问题,想当然的就认为是由于太长时间没有操作,导致超过MySQL服务端上的wait_timeout的设置,最终连接被MySQL服务端回收了。
最近一次突然自己同事写的脚本在运行过程中被中断了,查看报错信息依然是“mysql server has gone away”,同事的脚本在多个MySQL实例上根据时间范围取值,虽然执行时间长了点,但是绝对不会有超过wati_timeout的空闲等待时间,于是去学习了一下到底有哪几种情况会出现这个报错。
情况1
就是最常见的,一个链接超过wait_timeout的设置时间没有做任何事情,被MySQL服务端关闭链接并回收资源。
针对这种情况要不调大wait_timeout或者不断的向MySQL服务端发送心跳信号,保持链接。
情况2
你的链接被kill掉了,有可能是DBA人工操作,也可能是各种自动化系统操作,可以通过监控status中com_kill状态值来判断刚才是否发生了kill操作。
情况3
MySQL的客户端如果默认配置中有mysql_opt_read_timeout或者mysql_opt_write_timeout参数,并且操作时间超过了其中一个参数的设置,客户端自身会关闭链接。所以需要了解自己使用的mysql客户端。
情况4
还有一种可能是发送的请求或者返回的结果集太大了,超过MySQL的max_allowed_packet_size的设置,导致发生这种报错。多说一句,这个参数需要客户端和服务端同时配置并保持一致才会生效。
最常见的Linux上的mysql客户端可以使用如下命令查看:
mysql --help | grep ^max-allow
max-allowed-packet 1677721
我们可以看到我们服务器上默认的设置为16M。
情况5
这种比较罕见的情况是MySQL服务端的DNS反解失败导致,理论上我们可以配置–skip-networking参数来规避这种问题。(但是官方文档居然说即使配置了也可能出现这种报错,T_T)
情况6
还有就是如果程序使用了多进程,而所有进程都尝试使用同一个链接和MySQL服务端建立链接的时候就会出现gone away的报错了。(初步怀疑,这也就是我同事遇到的问题了。)
情况7
最后这种比较弱,但是真实发生过,那就是mysql实例宕机了。实例都没有了,自然什么都没有了。当然这种情况判断起来比较方便,一般都会有mysql的存活监控。但是要小心一种情况,就是实例crash后迅速recover,如果监控程序的间隔大于recover的时间,那么就很难发现了。建议使用如下方法复查一下,另外针对uptime最好做为状态的一个必要监控点。
show global status like 'uptime';
+---------------+---------+
| Variable_name | Value |
+---------------+---------+
| Uptime | 1230699 |
+---------------+---------+
最后如果想对“mysql server has gone away”进行详细的追查,建议在mysqld实例启动的时候添加–log-warnings=2 参数,这样就可以在error日志中看到详细的信息了。
mysql server has gone away的原因的更多相关文章
- 在centos中php 在连接mysql的时候,出现Can't connect to MySQL server on 'XXX' (13)
原文连接:http://hi.baidu.com/zwfec/item/64ef5ed9bf1cb3feca0c397c 红色的是命令 SQLSTATE[HY000] [2003] Can't con ...
- Procedure execution failed 2013 - Lost connection to MySQL server during query
1 错误描述 Procedure execution failed 2013 - Lost connection to MySQL server during query 2 错误原因 由错误描述可知 ...
- SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'XXX' (13)
SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'XXX' (13) 我可以真见识了 SELinux 的利害了, 这个问题让我找了好长时 ...
- Yii 数据库重连告别General error: 2006 MySQL server has gone away
General error: 2006 MySQL server has gone away 错误原因 制造错误 解决办法 最新办法 错误原因 Mysql has gone away MySQL 服务 ...
- MySQL Backup--Xtrabackup备份异常(MySQL Server has gone away)
错误场景MySQL 版本:5.7.24XtraBackup 版本:2.4.8CentOS 版本:6.5 MySQL需要新增一个从库,为避免XtraBackup备份影响生产,选择在从库上进行备份,备份脚 ...
- MySQL server has gone away报错原因分析/
在平时和开发的交流 以及 在论坛回答问题的或称中会发现这个问题被问及的频率非常高. 程序中报错: MySQL server has gone away 是什么意思? 如何避免? 因此,感觉有必要总结一 ...
- 黄聪:Wordpress、PHP使用POST数据过大导致MySQL server has gone away报错原因分析
错误原因: 当POST的数据超过 max_allowed_packet 就会报 MySQL server has gone away 的错误. 1.查看当前Mysql的 max_allowed_pac ...
- Can’t connect to local MySQL server through socket 原因解析
在连接mysql的时,经常会出现以下错误提示: ERROR (HY000): Can't connect to local MySQL server through socket '/var/lib/ ...
- CentOS下httpd下php 连接mysql 本机可以,外网报错Could not connect: Can't connect to MySQL server on '127.0.0.1' (13)2003 原因解析
php代码很简单: $server="127.0.0.1"; println("Begin"); $link = mysql_connect($server,& ...
随机推荐
- 目标检测-基于Pytorch实现Yolov3(1)- 搭建模型
原文地址:https://www.cnblogs.com/jacklu/p/9853599.html 本人前段时间在T厂做了目标检测的项目,对一些目标检测框架也有了一定理解.其中Yolov3速度非常快 ...
- 实现UE添加自定义按钮之添加菜单
1.ueditor.config.js配置文件中配置 2.在ueditor.all.js配置文件中配置点开的的弹框位置 3.在ueditor1_4_3-utf8-jsp\themes\default\ ...
- CRM 业务
1. 创建CRM项目 引入插件 创建数据库 from django.db import models from django.db import models class Department(mod ...
- 搜索关键词智能提示suggestion
转载自:stormbjm的专栏 题目详情:百度搜索框中,输入“北京”,搜索框下面会以北京为前缀,展示“北京爱情故事”.“北京公交”.“北京医院”等等搜索词,输入“结构之”,会提示“结构之法”,“结构之 ...
- GUC-2 原子性
import java.util.concurrent.atomic.AtomicInteger; /* * 一.i++ 的原子性问题:i++ 的操作实际上分为三个步骤“读-改-写” * int i ...
- AC日记——830A - Office Keys
思路: 背包: 代码: #include <cmath> #include <cstdio> #include <cstring> #include <ios ...
- lr11_Vugen_Genrial Options选项介绍:
lr11_Vugen_Genrial Options选项介绍:
- Windows环境上装在VM,VM安装CentOS7
1.下载VM并且安装 VM下载地址:https://www.vmware.com/products/workstation-pro.html 来自百度经验的的一个密钥(VMware Workstati ...
- JAVAEE学习——hibernate03:多表操作详解、级联、关系维护和练习:添加联系人
一.一对多|多对一 1.关系表达 表中的表达 实体中的表达 orm元数据中表达 一对多 <!-- 集合,一对多关系,在配置文件中配置 --> <!-- name属性:集合属性名 co ...
- 详细理解Java虚拟机的运行过程
基本概述: Java虚拟机简称JVM,是JRE中的一部分,也是Java程序运行的最关键的部分.完整的Java运行流程大致包括编译.java文件形成.class文件,然后根据.class文件的内容进行一 ...