一般错误:2006 MySQL服务器不见了[关闭]


8

这是我突然遇到的错误。

Additional uncaught exception thrown while handling exception.

Original
PDOException: SQLSTATE[70100]: Unknown error: 1317 Query execution was interrupted...my query

Additional
PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away...my query

在进行了一些研究之后,听起来好像是我制作的自定义模块正在尝试进行太大的查询。似乎对很多人有用的解决方案是:

  1. 打开my.ini
  2. 将“ max_allowed_pa​​cket”从“ 1m”更改为“ 16m”(或更大)
  3. 保存my.ini并重新启动MySQL

但是,我在共享服务器上,因此我无法编辑my.ini,尽管我的提供商已向我确认该值设置为1M,但他们不会增加该值。

我也尝试添加这样的:ini_set('mysqli.reconnect', 'on');settings.php。它没有解决问题。

有谁知道另一个解决方案,或者解决方法?

谢谢。


Answers:


8

共享托管公司不会放弃SUPER特权。如果有, 只需运行以下命令即可轻松将max_allowed_pa​​cket设置为512M:

mysql> SET GLOBAL max_allowed_packet = 1024 * 1024 * 512;

无需重新启动。然后,此后所有传入连接都可以具有512M 数据包

你不可以做这个:

mysql> SET max_allowed_packet = 1024 * 1024 * 512;

因为你得到

ERROR 1621 (HY000): SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value

我能想到的唯一替代方法是切换到Amazon EC2并在那里安装MySQL。这样,您可以自由控制my.cnf / my.ini并拥有SUPER特权。


0

我要求提供者增加价值,但他们没有。我能理解为什么,这是一家公司,他们希望我每月为专用服务器支付29.99的费用,而不是为共享服务器支付4.99的费用。

但是,有一个解决方案:识别太大的查询并将其分为两个或更多部分。我将问题查询一分为二:问题已解决。效率低下-是的-但比我的网站根本无法运行或必须支付额外费用要好。


请记住我所说的关于MySQL数据包的信息(superuser.com/a/273833/76764)那些可能阻塞MySQL数据包的常见怀疑对象是大的TEXT / BLOB字段。因此,您可能需要考虑压缩您的TEXT/BLOB fields杰里装配代码。
RolandoMySQLDBA

是的,可能是问题所在,但是尽管我的SELECT查询相对复杂,但返回的结果集只是几百个字符的文本。
dbj44

2
您可能开始遇到缓存表执行很大的INSERT的问题。您的解决方案在这里或Drupal进行查询的任何其他地方都行不通。
mpdonadio

它不是INSERT,而只是带有大约25个联接的SELECT查询。所有这些都通过查询生成器完成。您知道为什么会导致这种错误吗?通过表单提交处理程序执行INSERT没问题。
dbj44

0

问题是因为 max_allowed_packet,您将其设置为更大的值。

如何解决此问题(如果您在Windows中并且使用xamp,否则请找到my.ini文件)
转到xampp \ mysql \ bin
打开my.ini,将
“ max_allowed_pa​​cket”从“ 1m”更改为“ 16m”,
保存my.ini,
现在重新启动通过XAMPP控制面板的MySql。

在这里找到此解决方案。http://minorpoint.blogspot.com/2007/09/mysql-server-has-gone-away.html

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.