MySQL Error 2006 MySQL server has gone away原因分析


PHP执行后台脚本程序,程序执行过程中偶尔会有MySQL的错误:SQLSTATE[HY000]: General error: 2006 MySQL server has gone away,这个错误官方的解释是客户端无法向服务器发送请求,可能是连接超时了。产生这个问题的原因有很多,具体可以看看MySQL官网的解释
 
 
产生这个问题的原因可能有以下几种情况:
1:服务器关闭连接后,试图向服务器发送查询,这表明必须修改应用逻辑错误;
2:客户端应用运行不同主机,连接至MySQL的主机没有必要的权限;
3:客户端TCP/IP连接超时,这可能是使用了MySQL选项引起的,这种情况增加超时时间可以帮助解决问题;
4:服务器端连接超时和客户端自动重连被关闭;
5:这种情况的解决方案就是用mysql_ping()连接确认自上次以为是否有长时间查询(MyODBC原理),或者设置wait_timeout参数为很高的值,使连接不可能超时;
6:向服务器发送不正确或者太大的查询也会导致这种错误。如果mysqld收到的包太大或者无序,它就认为客户端发生错误而断开连接,如果需要大查询,可以修改max_allowed_packet变量,该变量默认值是1M,在客户端也需要设置最大包的大小;
7:INSERT or REPLACE语句插入大量的行也会引起这种错误,这些语句不考虑插入的行数而发送单一的请求至服务器,因此减少插入的行数可以避免经常发生这种错误;
8:如果解析主机名失败也可能看到这种错误,这是因为MySQL依赖于主机系统解析主机名,但无法知道它是否有效,以MySQL观点来看,在任何网络超时中这种情况都是不易察觉的;
9:如果应用产生子进程,所有子进程都试图使用同样的连接至MySQL服务器,也同样会出现这种错误,可以把不同的子进程用不同的连接来避免这种问题;
10:可以检查mysql服务是否已经死掉,执行重启和检查服务器启动时间。如果客户端连接中断是因为mysqld崩溃和重启,可以集中查找Ping Mysql服务,如果没有连接则重新连接崩溃的原因;
 
 
http://dev.mysql.com/doc/refman/5.1/en/gone-away.html
 
 
 
标签: MySQL
评论: 0 | 引用: 0 | 阅读: 4828