删除表格出现:MySQL server has gone away 如何解决!!!
程序启动之后,连接数mysql服务器,选择数据库,建立表格。
然后在程序某个地方要删除一个表格(DROP TABLE IF EXISTS table_name).。 问题就在此时出现了,删除失败,返回error 2006 MySQL server has gone away ;
((应该上mysql的问题--可能是设置或者上版本的问题? 因为我连上另外一台主机上的mysql 就没有问题))
网上查了资料,涉及到的原因可能如下:(括号部分是对我情况的分析)
产生这个问题的原因可能有以下几种情况:
1:服务器关闭连接后,试图向服务器发送查询,这表明必须修改应用逻辑错误;
(这个应该不可能,因为我的服务器并没有关闭)
2:客户端应用运行不同主机,连接至MySQL的主机没有必要的权限;
(这个不会,我登录的用户,除了GRANT功能之外,其他的操作的权限都是具备的,而且我也用具备所有权限的root登录过,同样出现这样的问题)
3:客户端TCP/IP连接超时,这可能是使用了MySQL选项引起的,这种情况增加超时时间可以帮助解决问题;
(这个应该不是,因为我的程序启动起来从连接数据库到执行删除 那个表格的操作 间隔时间不到2分钟中,但是我的wait_timeout 设置的是28800)
4:服务器端连接超时和客户端自动重连被关闭;
( 同上,超时应该不是。客户端自动重连 没有这样的操作)
5:这种情况的解决方案就是用mysql_ping()连接确认自上次以来是否有长时间查询(MyODBC原理),或者设置wait_timeout参数为很高的值,使连接不可能超时;
(刚才已经说了,从连接数据库到操作删除,不到2分钟,所有不会超时。但是我还是重新设置了一下wait_timeout 使其增大10倍,奇怪的事情发生了,MySQL server has gone away 不发生了,但是接下来的建表操作出现了这个错误:
2012-12-25 11:24 MySQL ERROR:1005 Can't create table (erron:121)
很奇怪,我建表的时候并没有用到外键,怎么会出现这个问题呢? 当然我建表的方式是这样的:
CREATE TABLE table_name SELECT FROM table_name2…… 也就是创建的表的结构和内容是从别的表复制过来的部分记录
)
请问这是什么原因呢??
继续下一部分的排查:
6:向服务器发送不正确或者太大的查询也会导致这种错误。如果mysqld收到的包太大或者无序,它就认为客户端发生错误而断开连接,如果需要大查询,可以修改max_allowed_packet变量,该变量默认值是1M,在客户端也需要设置最大包的大小;
(这个不可能,因为向别的主机上的mysql操作没有问题,所有不正确查询和无序包可以排除。max_allowed_packet的大小,我改大10倍,结果是:
7:INSERT or REPLACE语句插入大量的行也会引起这种错误,这些语句不考虑插入的行数而发送单一的请求至服务器,因此减少插入的行数可以避免经常发生这种错误;
(我是采用 CREATE TABLE xxxx SELECT * FROM tablexxx ,也就是建表之后,数据之间拷贝另外一张表上的内容,这种算: INSERT or REPLACE语句插入大量的行吗?)
8:如果解析主机名失败也可能看到这种错误,这是因为MySQL依赖于主机系统解析主机名,但无法知道它是否有效,以MySQL观点来看,在任何网络超时中这种情况都是不易察觉的;
(这个情况我不了解上什么情况,但是我认为我的问题不是这个原因)
9:如果应用产生子进程,所有子进程都试图使用同样的连接至MySQL服务器,也同样会出现这种错误,可以把不同的子进程用不同的连接来避免这种问题;
(目前数据库操作都是同一个进程,没有另外的进程操作数据库,所有不是)
10:可以检查mysql服务是否已经死掉,执行重启和检查服务器启动时间。如果客户端连接中断是因为mysqld崩溃和重启,可以集中查找Ping Mysql服务,如果没有连接则重新连接崩溃的原因;
(没有死掉,因为我用电脑上的客户端连接它,还是好好的)
http://haili.me/archives/561.html
请高手出招吧!!!请版主救命~~~