MySQL server has gone away 难题的缓慢解决方式

决断是还是不是归于那一个缘故的形式很简短,步入mysql调整台,查看mysql的周转时间长度

$conn=mysql_connect( … … );

以下内容摘自天涯论坛:

不当解析及解决办法—MySQL server has gone
away

应用程序(比如PHP卡塔尔长日子的进行批量的MYSQL语句。实行叁个SQL,但SQL语句过大依旧语句中包括BLOB大概longblob字段。比方,图片数据的管理。都轻便引起MySQL
server has gone away。

前些天境遇相近的现象,MySQL只是冷冷的说:MySQL server has gone away。

大约浏览了须臾间,首要大概是因为以下二种原因:
黄金年代种可能是出殡和安葬的SQL语句太长,招致超越了max_allowed_packet的朗朗上口,假如是这种原因,你意气风发旦修正my.cnf,加大max_allowed_packet的值就可以。

再有黄金时代种可能是因为一些原因导致超时,比方说程序中收获数据库连接时接纳了Singleton的做法,即便每每三翻五次数据库,但实则采用的都以同二个接连,何况程序中某三遍操作数据库的间隔时间超过了wait_timeout(SHOW
STATUS能来看此设置卡塔尔国,那么就只怕现身难点。最简便的处理情势便是把wait_timeout改大,当然你也足以在前后相继里平常顺手mysql_ping()一下,那样MySQL就驾驭它不是壹个人在打仗。

解决MySQL server has gone away

1、应用程序(举例PHP卡塔 尔(阿拉伯语:قطر‎长日子的施行批量的MYSQL语句。最广泛的正是搜罗也许新旧数据转载。
养虎遗患方案:
在my.cnf文件中增加大概改正以下三个变量:
wait_timeout=2880000
interactive_timeout = 2880000
关于多少个变量的现实表明能够google只怕看官方手册。假使无法改改my.cnf,则能够在接连数据库的时候设置CLIENT_INTERACTIVE,比如:
sql = “set interactive_timeout=24*3600”;
mysql_real_query(…)

2、施行四个SQL,但SQL语句过大依旧语句中蕴含BLOB或然longblob字段。比方,图片数据的拍卖
解决方案:
在my.cnf文件中足够恐怕涂改以下变量:
max_allowed_packet = 10M(也足以安装本身必要的尺寸)
max_allowed_packet 参数的功能是,用来支配其通讯缓冲区的最大尺寸。

前几天做网址有二个站要用到WEB网页搜罗器功效,当二个PHP脚本在伸手URubiconL的时候,大概这一个被呼吁的网页卓殊的逐步,超越了mysql的
wait-timeout时间,然后当网页内容被抓回去后,寻思插入到MySQL的时候,发掘MySQL的总是超时关闭了,于是就现身了“MySQL
server has gone
away”那样的失实提醒,解决那几个难题,笔者的资历有以下两点,也许对大家有用场:
第 生龙活虎种形式:
当然是增添你的
wait-timeout值,这几个参数是在my.cnf(在Windows下台上面是my.ini卡塔 尔(阿拉伯语:قطر‎中设置,小编的数据库负荷微微大学一年级些,所以,小编设置的值
为10,(那个值的单位是秒,意思是当二个数据库连接在10分钟内没有任何操作的话,就能狂暴关闭,笔者利用的不是永世链接
(mysql_pconnect),用的是mysql_connect,关于这些wait-timeout的功能你能够在MySQL的经过列表中看出
(show processlist)
卡塔尔国,你能够把那几个wait-timeout设置成更加大,比方300秒,呵呵,平时来说300秒丰盛用了,其实你也能够毫不安装,MySQL暗中同意是8个时辰。情状由你的服务器和站点来定。
其次种方式:
那也是自个儿个人认为最佳的秘技,即检查 MySQL的链接状态,使其再度链接。
莫不我们都精晓有mysql_ping这么叁个函数,在超级多材质中都在说那些mysql_ping的
API会检查数据库是或不是链接,假如是断开的话会尝试再一次连接,但在自己的测量试验进程中开掘事实并非那样子的,是有标准化的,必需求经过
mysql_options这些C
API传递相关参数,让MYSQL有断开自动链接的接受(MySQL默感觉不自动连接卡塔 尔(阿拉伯语:قطر‎,但自己测验中开掘PHP的MySQL的API中并不带这么些函数,你重新编辑MySQL吧,呵呵。但mysql_ping这几个函数依旧终于能用得上的,只是要在里面有三个微细操作工夫:
那是笔者的的数据库操 作类中间的贰个函数
复制代码 代码如下:

function ping(){
if(!mysql_ping($this->link)){
mysql_close($this->link); //注意:必须求先实行数据库关闭,那是尤为重要
$this->connect();
}
}

本人须要调用那几个函数的代码也许是那样子的
复制代码 代码如下:

$str =
file_get_contents(‘http://www.jb51.net’);
$db->ping();//经过前边的网页抓取后,恐怕会导致数据库连接关闭,检查并再度连接
$db->query(‘select * from table’);

ping()那么些函数先检查评定数据连接是或不是通常,如若被关门,整个把当前剧本的MYSQL实例关闭,再另行连接。
经 过如此管理后,能够非常常有效的解决MySQL server has gone
away那样的标题,何况不会对系统形成额外的支付。

Resources allowed by the default configuration are normally insufficient
to run a resource-intensive application. You must modify the following
resource specifications if they are available in your original
configuration file, or add them to the configuration file if they are
not already specified (because some are not present by default) :

mysql现身E安德拉RO景逸SUV : (二零零七, ‘MySQL server has gone away’)
的难题意思就是指client和MySQL server之间的链接断开了。

在my.cnf文件中增加或然涂改以下变量:
max_allowed_packet = 10M
(也能够安装本人索要的轻重)

解决

在MySQL上边包车型客车my.ini文件增加两行代码:

wait_timeout=2880000 
interactive_timeout =  2880000 

本人是如此解决的,可是网络也可能有说法是试行叁个SQL,但SQL语句过大照旧语句中包蕴BLOB恐怕longblob字段。比方,图片数据的处理。那么这样的话就须求纠正一下参数:

max_allowed_packet = 10M(也可以设置自己需要的大小) 

max_allowed_packet 参数的职能是,用来支配其通讯缓冲区的最大尺寸。

[mysqld]

用select * into outfile 的办法导出到文件,查看文件大小是不是超过max_allowed_packet ,借使超过则须求调动参数,可能优化语句。

这段代码的含义,与Mysql官方提议的方法思路符合[ If you have a script,
you just have to issue the query again for the client to do an automatic
reconnection.
]。在实际上深入分析中发觉,if(!$conn)而不是牢靠的,程序通过了if(!$conn)的查检后,如故会回来上述荒唐。

并发如此的难点,应用程序(例如PHP卡塔 尔(英语:State of Qatar)长日子的实践批量的MYSQL语句。施行二个SQL,但SQL语句过大照旧语句中带有BLOB只怕longblob字段。比方,图片数据的拍卖。都轻巧引起MySQL
server has gone away。

2、实行叁个SQL,但SQL语句过大照旧语句中包罗BLOB大概longblob字段。举个例子,图片数据的管理
缓慢解决方案:
在my.cnf文件中丰裕大概涂改以下变量:

若是uptime数值十分的大,申明mysql服务运转了比较久了。表达前段时间服务未有重启过。要是日志未有相关音讯,也表名mysql服务以来并未重启过,可以世襲检查上边几项内容。

The server’s default max_allowed_packet value is 1MB. You can increase
this if the server needs to handle big queries (for example, if you are
working with big BLOB columns). For example, to set the variable to
16MB, start the server like this:

一网打尽方案:

wait_timeout 是28800秒,即mysql链接在无操作28800秒后被电动关闭

$conn=mysql_connect(…) 能够健康专门的学业。

max_allowed_packet = 10M(也足以设置本身索要的轻重)
max_allowed_packet 参数的效率是,用来支配其通信缓冲区的最大尺寸。

interactive_timeout=24*3600″;mysql_real_query2、试行三个SQL,但SQL语句过大依旧语句中满含BLOB或许longblob字段。举例,图片数据的管理技术方案:在my.cnf文件中加上或许校勘以下变量:max_allowed_packet

10Mmax_allowed_packet参数的成效是,用来调控其通讯缓冲区的最大尺寸MySQL:
古怪的MySQL server has gone away及其化解在Mysql试行show
status,平时更尊敬缓存效果、进程数等,往往忽略了几个值:Variable_name
Value Aborted_clients 3792 Aborted_connects
376常常只占query的0.0x%,所以并不为人所尊重。何况在思想Web应用上,query错误对顾客来说影响并相当小,只是再也刷新一下页面就OK了。近期的底蕴改建中,把好多使用作为service运维,无法唤起客户重新刷新,这种气象下,恐怕就能够影响到劳动的为人。通进程序脚本的日记跟踪,首要报错消息为“MySQL
server has gone away”。官方的解说是:The most common reason for the
MySQL server has gone away error is that the server timed out and closed
the connection.Some other common reasons for the MySQL server has gone
away error are:You (or the db administrator) has killed the running
thread with a KILL statement or a mysqladmin kill command.You tried to
run a query after closing the connection to the server. This indicates a
logic error in the application that should be corrected.A client
application running on a different host does not have the necessary
privileges to connect to the MySQL server from that host.You got a
timeout from the TCP/IP connection on the client side. This may happen
if you have been using the commands: mysql_options(…,
MYSQL_OPT_READ_TIMEOUT,…) or mysql_options(…,
MYSQL_OPT_WRITE_TIMEOUT,…). In this case increasing the timeout may
help solve the problem.You have encountered a timeout on the server side
and the automatic reconnection in the client is disabled (the reconnect
flag in the MYSQL structure is equal to 0).You are using a Windows
client and the server had dropped the connection (probably because
wait_timeout expired) before the command was issued.The problem on
Windows is that in some cases MySQL doesn’t get an error from the OS
when writing to the TCP/IP connection to the server, but instead gets
the error when trying to read the answer from the connection.In this
case, even if the reconnect flag in the MYSQL structure is equal to 1,
MySQL does not automatically reconnect and re-issue the query as it
doesn’t know if the server did get the original query or not.The
solution to this is to either do a mysql_ping on the connection if
there has been a long time since the last query (this is what MyODBC
does) or set wait_timeout on the mysqld server so high that it in
practice never times out.You can also get these errors if you send a
query to the server that is incorrect or too large. If mysqld receives a
packet that is too large or out of order, it assumes that something has
gone wrong with the client and closes the connection. If you need big
queries (for example, if you are working with big BLOB columns), you can
increase the query limit by setting the server’s max_allowed_packet
variable, which has a default value of 1MB. You may also need to
increase the maximum packet size on the client end. More information on
setting the packet size is given in Section A.1.2.9, “Packet too
large”.An INSERT or REPLACE statement that inserts a great many rows can
also cause these sorts of errors. Either one of these statements sends a
single request to the server irrespective of the number of rows to be
inserted; thus, you can often avoid the error by reducing the number of
rows sent per INSERT or REPLACE.You also get a lost connection if you
are sending a packet 16MB or larger if your client is older than 4.0.8
and your server is 4.0.8 and above, or the other way around.It is also
possible to see this error if hostname lookups fail (for example, if the
DNS server on which your server or network relies goes down). This is
because MySQL is dependent on the host system for name resolution, but
has no way of knowing whether it is working — from MySQL’s point of view
the problem is indistinguishable from any other network timeout.You may
also see the MySQL server has gone away error if MySQL is started with
the –skip-networking option.Another networking issue that can cause
this error occurs if the MySQL port is blocked by your firewall, thus
preventing any connections at all to the MySQL server.You can also
encounter this error with applications that fork child processes, all of
which try to use the same connection to the MySQL server. This can be
avoided by using a separate connection for each child process.You have
encountered a bug where the server died while executing the
query.据此剖析,大概原因有3:1,Mysql服务端与顾客端版本不匹配。2,Mysql服务端配置有短处也许优化不足3,需求修正程序脚本通过改换八个服务端与客商端版本,开采只好部分减弱报错,并不可能一心解决。清除1。对服务端实行了绝望的优化,也无从达到可以效果。在timeout的取值设置上,从资历值的10,到PHP暗中认可的60,举行了频仍品尝。而Mysql官方私下认可值显明是不恐怕的。进而对2也张开通晓除。针对3对程序代码进行剖析,开采前后相继中山大学量运用了看似如下的代码:$conn=mysql_connect;…
… … …if{
//reconnect$conn=mysql_connect;}mysql_query;这段代码的意思,与Mysql官方建议的主意思路切合[
If you have a script, you just have to issue the query again for the
client to do an automatic reconnection.
]。在实际上剖析中发觉,if并不是牢靠的,程序通过了if的检察后,还是会回去上述乖谬。对前后相继开展了改写:if{
// connect …}elseif{ // reconnect … }mysql_query;经实际观测,MySQL
server has gone away的报错基本减轻。BTW: 附带三个关于 reconnect
的疑问,在php4x+client3x+mysql4x的旧情状下,reconnet的代码:$conn=mysql_connect
能够常常办事。然而,在php5x+client4x+mysql4x的新条件下,$conn=mysql_connect再次来到的$conn有风姿浪漫对情形下不可用。必要书写为:mysql_close;$conn=mysql_connect;重回的$conn才可以平常使用。原因未明。未做深切斟酌,也未见相关斟酌。可能mysql官方的BUG陈述中会有啊。~~呵呵~~本文来源CSDN博客,转发请标记出处::
remember that your MySQL “max_allowed_packet” configuration setting
mysql 暗许最大能够管理的是1MB
借使你在sql使用了大的text恐怕BLOB数据,就能产出这几个题目。
php手册上的注释 When trying to INSERT or UPDATE and trying to put a
large amount of text or data into a mysql table you might run into
problems. In mysql.err you might see: Packet too large To fix you just
have to start up mysql with the option -O max_allowed_packet=maxsize
You would just replace maxsize with the max size you want to insert, the
default is 65536 mysql手册上说 Both the client and the server have their
own max_allowed_packet variable, so if you want to handle big packets,
you must increase this variable both in the client and in the server. If
you are using the mysql client program, its default max_allowed_packet
variable is 16MB. To set a larger value, start mysql like this:
shell> mysql –max_allowed_packet=32M That sets the packet size to
32MB. The server’s default max_allowed_packet value is 1MB. You can
increase this if the server needs to handle big queries (for example, if
you are working with big BLOB columns). For example, to set the variable
to 16MB, start the server like this: shell> mysqld
–max_allowed_packet=16M You can also use an option file to set
max_allowed_packet. For example, to set the size for the server to
16MB, add the following lines in an option file:
[mysqld]max_allowed_packet=16M
使用mysql做数据库还原的时候,由于有些数据一点都不小,会并发如此的谬误:The
MySQL Server returned this Error:MySQL Error Nr.2005-MySQL server has
gone
away。小编的一个150mb的备份还原的时候就涌出了那错误。消除的主意正是找到mysql安装目录,找到my.ini文件,在文件的末梢增添:max_allowed_packet
= 10M。 max_allowed_packet
参数的功效是,用来调整其通讯缓冲区的最大尺寸。

经实际观测,MySQL server has gone away的报错基本消除。

  
关于五个变量的具体表达能够google只怕看官方手册。若是无法改过my.cnf,则足以在连接数据库的时候设置CLIENT_INTERACTIVE,比如:

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
以下是补偿:应用程序长日子的施行批量的MYSQL语句。实施一个SQL,但SQL语句过大依然语句中带有BLOB大概longblob字段。举例,图片数据的拍卖。都轻巧引起MySQL
server has gone away。 几天前蒙受相同的现象,MySQL只是冷冷的说:MySQL
server has gone away。 概览了刹那间,首要可能是因为以下三种原因:
生龙活虎种恐怕是发送的SQL语句太长,导致当先了max_allowed_packet的高低,要是是这种原因,你借使改正my.cnf,加大max_allowed_packet的值就可以。
还也可以有生机勃勃种恐怕是因为有些原因产生超时,举个例子说程序中获得数据库连接时选择了Singleton的做法,即使反复一而再数据库,但骨子里使用的都以同一个总是,而且程序中某几回操作数据库的间距时间超过了wait_timeout,那么就大概现身难点。最简便的处理形式正是把wait_timeout改大,当然你也足以在程序里有时顺手mysql_ping()一下,那样MySQL就精晓它不是壹人在打仗。
解决MySQL server has gone away
1、应用程序长日子的推行批量的MYSQL语句。最广泛的就是搜罗或然新旧数据转载。
解决方案: 在my.cnf文件中增加大概改过以下多个变量:
wait_timeout=2880000 interactive_timeout = 2880000
关于四个变量的现实表达能够google或许看官方手册。假诺不能够改改my.cnf,则足以在连接数据库的时候设置CLIENT_INTERACTIVE,比如:
sql = “set interactive_timeout=24*3600”; mysql_real_query
2、实践二个SQL,但SQL语句过大依旧语句中带有BLOB也许longblob字段。比方,图片数据的拍卖
应用方案: 在my.cnf文件中增添只怕涂改以下变量: max_allowed_packet =
10M max_allowed_packet 参数的成效是,用来决定其通信缓冲区的最大尺寸。
近来做网址有一个站要用到WEB网页收集器作用,当多少个PHP脚本在央求UENCOREL的时候,恐怕这些被号令的网页异常慢慢,超过了mysql的
wait-timeout时间,然后当网页内容被抓回去后,筹划插入到MySQL的时候,发掘MySQL的总是超时关闭了,于是就应时而生了“MySQL
server has gone
away”那样的失实提示,解决那么些标题,笔者的资历有以下两点,只怕对大家有用途:
第 生机勃勃种艺术: 当然是充实你的
wait-timeout值,这些参数是在my.cnf中安装,小编的数据库负荷微微大学一年级点,所以,笔者设置的值
为10,(这几个值的单位是秒,意思是当三个数据库连接在10分钟内尚未别的操作的话,就能狂暴关闭,笔者动用的不是世代链接
,用的是mysql_connect,关于那几个wait-timeout的效应你能够在MySQL的进度列表中看见,你可以把这么些wait-timeout设置成更加大,例如300秒,呵呵,平时来说300秒丰盛用了,其实您也得以不要安装,MySQL暗许是8个小时。情形由你的服务器和站点来定。 第二种方法:
那也是作者个人以为最棒的不二等秘书诀,即检查 MySQL的链接状态,使其重新链接。
或者大家都明白有mysql_ping这么二个函数,在许多材质中都在说那几个mysql_ping的
API会检查数据库是不是链接,借使是断开的话会尝试再次连接,但在自己的测量检验过程中开掘事实实际不是那样子的,是有法则的,必需求经过
mysql_options那些C
API传递相关参数,让MYSQL有断开自动链接的选项,但自身测验中窥见PHP的MySQL的API中并不带那几个函数,你再度编写MySQL吧,呵呵。但mysql_ping这些函数照旧终于能用得上的,只是要在其间有二个眇小操作技能:
那是本身的的数据库操 作类中间的八个函数 复制代码 代码如下: function ping(){
if(!mysql_ping{ mysql_close; //注意:必须求先进行数据库关闭,那是最主要$this->connect(); } } 作者索要调用那一个函数的代码可能是那样子的 复制代码 代码如下: $str = file_get_contents;
$db->ping();//经过前边的网页抓取后,大概会促成数据库连接关闭,检查天公地道复连接
$db->query(‘select * from table’);
ping()这一个函数先检查实验数据连接是或不是正规,若是被关闭,整个把最近剧本的MYSQL实例关闭,再重复连接。
经 过如此管理后,能够丰富实用的消除MySQL server has gone
away那样的主题材料,而且不会对系统造成额外的开销。
__________________________________________________________________________________________________
明日遇见近似之处,MySQL只是冷冷的说:MySQL server has gone away。
概览了瞬间,首要恐怕是因为以下二种原因:
生机勃勃种也许是发送的SQL语句太长,招致超越了max_allowed_packet的轻重,假诺是这种原因,你假如改进my.cnf,加大max_allowed_packet的值就可以。
还应该有朝气蓬勃种大概是因为一些原因引致超时,比方说程序中获得数据库连接时行使了Singleton的做法,即便一再连接数据库,但实际上选择的都是同一个连连,何况程序中某三回操作数据库的间距时间超越了wait_timeout,那么就大概现身难点。最简单易行的管理情势正是把wait_timeout改大,当然你也得以在前后相继里日常顺手mysql_ping()一下,那样MySQL就通晓它不是一位在打仗。
解决MySQL server has gone away
1、应用程序长日子的实行批量的MYSQL语句。最广泛的就是收罗也许新旧数据转载。
技术方案: 在my.cnf文件中丰盛也许涂改以下八个变量:
wait_timeout=2880000 interactive_timeout = 2880000
关于七个变量的具体表明能够google也许看官方手册。要是无法改革my.cnf,则能够在连接数据库的时候设置CLIENT_INTERACTIVE,比如:
sql = “set interactive_timeout=24*3600”; mysql_real_query
2、实践叁个SQL,但SQL语句过大如故语句中富含BLOB也许longblob字段。举个例子,图片数据的处理施工方案: 在my.cnf文件中拉长恐怕修正以下变量: max_allowed_packet =
10M
max_allowed_packet参数的效果与利益是,用来决定其通讯缓冲区的最大尺寸。1、应用程序长日子的实行批量的MYSQL语句。最广大的正是搜罗或然新旧数据转载。

MySQL: 古怪的MySQL server has gone away及其解决
来自:

sql = “set interactive_timeout=24*3600”;
mysql_real_query(…)

诱致这么的因由平常是sql操作的年华过长,或然是传递的数量太大(举例利用insert
… values的语句过长,
这种状态能够通过改正max_allowed_packed的布局参数来幸免,也足以在程序大校数据分批插入)。

jimmy | 15 三月, 2007 20:32

wait_timeout=2880000
interactive_timeout = 2880000   

即某些mysql长连接比较久未有新的伸手发起,抵达了server端的timeout,被server强行关闭。从此以后再经过这几个connection发起查询的时候,就能够报错server
has gone away

You can also encounter this error with applications that fork child
processes, all of which try to use the same connection to the MySQL
server. This can be avoided by using a separate connection for each
child process.

先要确认是还是不是您的空中商出难点,倘让你是编造空间的话就先如下操作

发出这几个主题材料的来由有多数,总计下英特网的解析:

经过转移三个服务端与顾客端版本,发掘只好部分缩小报错,并不能够一心缓和。消灭1。

复制代码

减轻方案:在my.ini文件中加上或许修正以下八个变量:wait_timeout=2880000interactive_timeout

2880000至于三个变量的实际表明能够google恐怕看官方手册。假若不可能改善my.cnf,则能够在三翻五次数据库的时候设置CLIENT_INTERACTIVE,比如:sql
= “set
interactive_timeout=24*3600”;mysql_real_query2、实行一个SQL,但SQL语句过大如故语句中含有BLOB恐怕longblob字段。比方,图片数据的管理实施方案在my.cnf文件中加上恐怕纠正以下变量:max_allowed_packet
= 10M max_allowed_packet
参数的功效是,用来调整其通讯缓冲区的最大尺寸。

校订章程

1卡塔 尔(英语:State of Qatar)方法1能够编写制定my.cnf来修改,在[mysqld]段如故mysql的server配置段举办改造。

max_allowed_packet = 20M只要找不到my.cnf能够通过

mysql –help | grep my.cnf去寻找my.cnf文件。

2) 方法2

进入mysql server

在mysql 命令行中运营

set global max_allowed_packet = 2*1024*1024*10然后停业掉那此mysql
server链接,再进来。

show VARIABLES like
‘%max_allowed_packet%’;查看下max_allowed_packet是或不是编辑成功------------
以下是互连网搜索的材质 -------------------

大概其余人碰着那些题目,不自然是那个时候的因由,那么,就把自家在网络找到比较康健的解析放到下边:有两篇,第黄金年代篇相比较直观,第二篇相比深奥。清除MySQL
server has gone away 二零一零-01-09
16:23:22前几日境遇雷同的场馆,MySQL只是冷冷的说:MySQL server has gone
away。大概浏览了大器晚成晃,重要只怕是因为以下三种原因:风流倜傥种恐怕是发送的SQL语句太长,招致超过了max_allowed_packet的大大小小,假设是这种原因,你假若纠正my.cnf,加大max_allowed_packet的值就能够。还大概有黄金年代种或者是因为一些原因产生超时,比方说程序中获取数据库连接时选用了Singleton的做法,就算反复总是数据库,但实则接受的都以同三个老是,并且程序中某四回操作数据库的间距时间超过了wait_timeout,那么就恐怕现身难点。最简单易行的处理格局正是把wait_timeout改大,当然你也能够在前后相继里时偶尔顺手mysql_ping()一下,这样MySQL就精晓它不是一人在打仗。消除MySQL
server has gone
away1、应用程序长日子的试行批量的MYSQL语句。最广泛的正是访问或许新旧数据转载。解决方案:在my.cnf文件中拉长大概涂改以下多个变量:wait_timeout=2880000interactive_timeout
= 2880000
关于七个变量的现实性表达能够google或然看官方手册。固然不能够改改my.cnf,则能够在接连数据库的时候设置CLIENT_INTERACTIVE,比如:sql
= “set

max_allowed_packet
参数的功力是,用来支配其通讯缓冲区的最大尺寸

重大恐怕是因为以下二种原因:
大器晚成种恐怕是出殡和下葬的SQL语句太长,引致超越了max_allowed_packet的深浅,假若是这种原因,你后生可畏旦校正my.cnf,加大max_allowed_packet的值就能够。
再有意气风发种大概是因为一些原因招致超时,比方说程序中得到数据库连接时接受了Singleton的做法,就算一再接连数据库,但实际上接受的都以同叁个连接,并且程序中某五遍操作数据库的间隔时间超越了wait_timeout(SHOW
STATUS能来看此设置卡塔尔国,那么就只怕现身难题。最简易的管理方式便是把wait_timeout改大,当然你也足以在程序里平常顺手mysql_ping()一下,那样MySQL就理解它不是一人在应战。
解决MySQL server has gone away

mysql> show global variables like
‘max_allowed_packet’;+——————–+———+| Variable_name
| Value |+——————–+———+| max_allowed_packet |
1048576 |+——————–+———+1 row in set 校勘参数:

再有生龙活虎种也许是因为一些原因产生超时,举例说程序中收获数据库连接时使用了Singleton的做法,固然每每老是数据库,但骨子里接纳的都以同叁个一而再连续,并且程序中某三遍操作数据库的间距时间超越了wait_timeout(SHOW
STATUS能看出此设置卡塔 尔(阿拉伯语:قطر‎,那么就大概现身难题。最简便易行的处理格局就是把wait_timeout改大,当然你也得以在程序里一时顺手mysql_ping()一下,那样MySQL就清楚它不是一人在战争。

复制代码

mysql> show global status like ‘com_kill’;+—————+——-+|
Variable_name | Value |+—————+——-+| Com_kill | 21
|+—————+——-+1 row in set原因四. Your SQL statement was too
large.

You can also get these errors if you send a query to the server that is
incorrect or too large. If mysqld receives a packet that is too large or
out of order, it assumes that something has gone wrong with the client
and closes the connection. If you need big queries (for example, if you
are working with big BLOB columns), you can increase the query limit by
setting the server’s max_allowed_packet variable, which has a default
value of 1MB. You may also need to increase the maximum packet size on
the client end. More information on setting the packet size is given in
Section A.1.2.9, “Packet too large”.

max_allowed_packet = 10M

缘由二. mysql连接超时

The solution to this is to either do a mysql_ping on the connection if
there has been a long time since the last query (this is what MyODBC
does) or set wait_timeout on the mysqld server so high that it in
practice never times out.

 代码如下

1 row in set大概查看MySQL的报错日志,看看有未有重启的音讯

mysql手册上说

复制代码

原因意气风发. MySQL 服务宕了

mysql_query($sql, $conn);

在my.cnf文件中足够可能涂改以下七个变量:

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

解决方案:

server has gone
away这种难题依照本身的经验,一是您程序向多个字段或一条语句中用极大的数目存款和储蓄,但您的mysql的max_allowed_pac…

这种场合和原因二肖似,只是二个是人为三个是MYSQL本人的动作

elseif(!mysql_ping($conn)){ // reconnect … }

 代码如下

由来三. mysql诉求链接进度被主动kill

或许别的人遇到这么些标题,不分明是这时的来头,那么,就把自身在网络找到比较康健的分析放到下边:
有两篇,第生龙活虎篇比较直观,第二篇比较深奥。
解决MySQL server has gone away 2009-01-09 16:23:22
来自:
前些天赶过相同的场景,MySQL只是冷冷的说:MySQL server has gone away。
粗粗浏览了生龙活虎晃,首要大概是因为以下二种原因:
风流倜傥种恐怕是出殡和安葬的SQL语句太长,招致当先了max_allowed_packet的分寸,假若是这种原因,你倘诺改过my.cnf,加大max_allowed_packet的值就能够。
还应该有大器晚成种或许是因为一些原因形成超时,举例说程序中赢得数据库连接时接收了Singleton的做法,即便频频总是数据库,但实在使用的都以同一个三回九转,何况程序中某一次操作数据库的间距时间当先了wait_timeout(SHOW
STATUS能见到此设置卡塔 尔(英语:State of Qatar),那么就大概现身难题。最简易的管理格局正是把wait_timeout改大,当然你也足以在程序里平时顺手mysql_ping()一下,那样MySQL就领会它不是一个人在打仗。
解决MySQL server has gone away

MyISAM specifications

当查问的结果集超越 max_allowed_packet
也会现出这么的报错。定位方法是打出有关报错的讲话。

$conn=mysql_connect( … … );

max_allowed_packet
参数的法力是,用来支配其通讯缓冲区的最大尺寸

mysql> show global status like ‘uptime’;+—————+———+|
Variable_name | Value |+—————+———+| Uptime | 3414707
|+—————+———+

对服务端实行了干净的优化,也不准达到规定的标准可观效果。在timeout的取值设置上,从经历值的10,到PHP暗中认可的60,实行了数十次品尝。而Mysql官方暗中认可值(8钟头)明显是不容许的。进而对2也扩充了清除。(越多优化的经历分享,就要现在收拾提供)

在my.cnf文件中加上只怕涂改以下变量:

2、施行叁个SQL,但SQL语句过大依然语句中含有BLOB可能longblob字段。
举个例子,图片数据的拍卖
减轻方案

1、设想主机顾客请联系空间商确认 MySQL
服务器是还是不是平常,可能您的次第在运作进程中消耗了太多的服务器财富,请联系空间商举行确认;

3,须求改革度序脚本

缓慢解决方案:

BTW: 附带二个有关 reconnect 的问号,

Important: Remember to keep backup files before you do anything! You
will also have to reload the MySQL service after making changes to these
configuration files.

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图