数据库常规错误:2006 MySQL服务器已消失


24

最近,无论什么类型,每次尝试添加内容时,我都开始出错。这是浏览器中显示的错误:

处理异常时引发的其他未捕获异常。

原始PDOException:SQLSTATE [HY000]:常规错误:2006 MySQL服务器已消失:从{comment} WHERE status =:status;中选择COUNT(cid); comment_count_unpublished()中的数组([:status] => 0)(/ Applications / MAMP / htdocs / modules / comment / comment.module的第313行)。

额外

PDOException:SQLSTATE [HY000]:常规错误:2006 MySQL服务器已消失:INSERT INTO {watchdog}(uid,类型,消息,变量,严重性,链接,位置,引用,主机名,时间戳)VALUES(:db_insert_placeholder_0,:db_insert_placeholder_1 ,:db_insert_placeholder_2,:db_insert_placeholder_3,:db_insert_placeholder_4,:db_insert_placeholder_5,:db_insert_placeholder_6,:db_insert_placeholder_7,:db_insert_placeholder_8,:db_insert_placeholder_9); 数组([:db_insert_placeholder_0] => 1 [:db_insert_placeholder_1] => php [:db_insert_placeholder_2] =>%type:!%function中的消息(%file的%line行)。[:db_insert_placeholder_3] => a:6:{ s:5:“%type”; s:12:“ PDOException”; s:8:“!message”; s:154:“ SQLSTATE [HY000]:常规错误:2006 MySQL服务器消失了:从{comment} WHERE status =:status;中选择COUNT(cid);数组([:status] => 0)“; s:9:”%function“; s:27:” comment_count_unpublished()“; s:5:”%file“; s:56:” / Applications / MAMP /htdocs/modules/comment/comment.module";s:5:"%line";i:313;s:14:"severity_level";i:3;} [:db_insert_placeholder_4] => 3 [:db_insert_placeholder_5] = > [:db_insert_placeholder_6] =>http:// localhost:8888 /?q = node%2Fadd%2Farcade-project&amp ; [:db_insert_placeholder_7] => http:// localhost:8888 / [:db_insert_placeholder_8] => 127.0.0.1 [:db_insert_placeholder_9] => 1338336955)在dblog_watchdog()中(/ Applications / MAMP / htdocs / modules / dblog / dblog.module)。

我的php错误文件中也出现以下错误:

PHP致命错误:/Applications/MAMP/htdocs/includes/database/database.inc:2136中出现消息“ SQLSTATE [HY000]:未捕获的异常” PDOException”:常规错误:2006 MySQL服务器已消失”

堆栈跟踪:
0 /Applications/MAMP/htdocs/includes/database/database.inc(2136):PDOStatement-> execute(Array)
1 /Applications/MAMP/htdocs/includes/database/database.inc(664):DatabaseStatementBase- > execute(Array,Array)
2 /Applications/MAMP/htdocs/includes/database/database.inc(2315):DatabaseConnection-> query('SELECT expire,...',Array,Array)
3 / Applications / MAMP / htdocs / includes / lock.inc(167):db_query('SELECT expire,...',Array)
4 /Applications/MAMP/htdocs/includes/lock.inc(146):lock_may_be_available('theme_registry:...' )
5 /Applications/MAMP/htdocs/includes/theme.inc(447):lock_acquire('theme_registry:...')6 /Applications/MAMP/htdocs/includes/bootstrap.inc(427
):ThemeRegistry-> set(数组)
7 [内部功能]:DrupalCacheArray-> __ destruct()
8在2136行的/Applications/MAMP/htdocs/includes/database/database.inc中抛出了{main}

我在解读这些错误消息时遇到了一些麻烦。谁能帮助我了解这里的事吗?

Answers:


31

十分之九的错误是由max_allowed_packetMySQL服务器的my.cnf文件中的设置过大引起的。

根据我的经验,MAMP的标准默认值为1M,这对于Drupal通常是不够的(特别是考虑到它生成的某些缓存字符串的大小)。

尝试逐渐增加该设置,以查看错误是否消失。我相信快速的Google搜索将告诉您如何在MAMP中执行此操作。


幸运的是,我的案件不属于10例中的1例。您的建议很有魅力!谢谢!
Mike2012

在Windows中面临同样的错误。已在本地配置apache,mysql和php堆栈...请指南
Prerit Mohan 2013年

如果是共享主机,我该怎么办?
穆罕默德·阿米·伯卡迪(Mohammed amine bourkadi),2015年

联系您的房东,要求他们进行更改。如果他们不能/不愿意,您需要确定此主机是否适合您@mohammedaminebourkadi。
克莱夫(Clive)

6

此MySQL / MariaDB错误:

错误:2006(CR_SERVER_GONE_ERROR)-MySQL服务器已消失

基本上意味着客户无法向服务器发送问题

这可能是由于临时故障,太大或无效的SQL查询,服务器的配置错误或托管提供商的限制而发生的。

通常,此错误可能是由于以下几种原因导致的:

  • 对服务器的查询不正确或太大,

    解决方案:增加max_allowed_packet变量

    注意:请确保变量位于[mysqld]部分(而非部分)下[mysql]

    注意:不要忘记重启MySQL / MariaDB服务器。

  • 您从客户端的TCP / IP连接中收到了超时。

    解决方案:增加wait_timeout变量

  • 您尝试关闭服务器的连接后运行查询。

    解决方案:应纠正应用程序中的逻辑错误。

  • 主机名查找失败(例如DNS服务器问题),或者已使用--skip-networking选项启动服务器。

    另一种可能性是您的防火墙阻止了MySQL端口(例如,默认情况下为3306)。

  • 正在运行的线程已被杀死,因此请重试。

  • 您遇到了一个错误,该错误导致服务器在执行查询时死亡。

  • 在其他主机上运行的客户端没有连接所需的特权。

  • 以及更多其他信息,请访问:B.5.2.9 MySQL服务器已消失

有关更多详细信息,请检查您的MySQL或系统日志(例如/var/log/messages)。

要调试MySQL服务器或客户端,请检查:26.5调试和移植MySQL


如果您尝试使用drushmysql命令从文件导入数据库,则可以:

  • 添加强制选项(-f),mysql以继续执行其余查询。

    如果数据库具有一些与缓存相关的大型查询,这些查询虽然很大,但无论如何都不相关,则这很有用。

    使用drush,尝试:cat foo.sql | $(drush sqlconnect) -f

  • 尝试--max-allowed-packetmysql较小的值应用选项。

  • 增加max_allowed_packetwait_timeout在您的服务器配置中(例如~/.my.cnf)。

  • 通过使用--skip-extended-insert选项来分解大型查询,再次转储原始数据库。然后再次导入文件。


另请参阅:错误2006(HY000):MySQL服务器已消失


3

@Clive通常给出的答案是这种情况,但是可能还有其他原因,尤其是对于节点添加表单。

节点添加表单通常很大,处理它们可能会占用大量内存(尤其是在保存过程中进行了图像处理(例如裁剪模块)时)。如果服务器内存不足,mysqld进程可能会被杀死,从而导致相同的“ gone away”消息。

提示是查看服务器日志。在CentOS机器上,您可能会在/ var / log / messages中看到以下条目

1月1日00:00:00服务器名内核:内存不足:杀死进程XXXX(mysqld)得分为XXX或牺牲孩子
1月1日00:00:00服务器名内核:杀死进程XXXX,UID XX(mysqld)total-vm:XXXkB ,anon-rss:XXXkB,file-rss:XXkB

此处的解决方案是添加更多RAM或添加/增加交换。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.