如何追踪Drupal max_allowed_pa​​cket错误?

时间:2011-02-23 06:02:55

标签: mysql debugging drupal caching drupal-6

我的一个暂存网站最近开始在每个管理页面上喷出巨大的错误:

User warning: Got a packet bigger than 'max_allowed_packet' bytes query: UPDATE cache_update SET data = ' ... ', created = 1298434692, expire = 1298438292, serialized = 1 WHERE cid = 'update_project_data' in _db_query() (line 141 of /var/www/vhosts/mysite/mypath/includes/database.mysqli.inc). (其中“......”大约有150万个字符的序列化数据)

我应该如何追踪错误的来源?将调试代码添加到_db_query会有什么用处,因为它被调用了很多吗?

2 个答案:

答案 0 :(得分:5)

无需跟踪此情况,因为我认为你无法修复它。

这是来自update.module的缓存,包含有关哪些模块具有更新版本的信息等。所以这来自该模块中的一个“_update_cache_set()”调用。

根据一个疯狂的猜测,我会说它是这个函数中的一个:http://api.drupal.org/api/drupal/modules--update--update.fetch.inc/function/_update_refresh/6

它基本上构建了一个巨大的数组,其中包含有关您网站上所有项目的信息,并尝试将其存储为单个序列化值。

您在此网站上安装了多少个模块?

我可以想出三种方法来“修复”这个错误:

  • 增加max_allowed_pa​​cket大小。 (my.conf中的max_allowed_pa​​cket设置)
  • 禁用update.module(无论如何,当您需要首先在开发站点上进行更新时,它在暂存/生产站点上没有用)
  • 禁用某些模块;)

答案 1 :(得分:1)

我遇到了类似的错误,并且绕了大约一个小时。

将内存限制增加到512m并仍然存在问题。并认为这就足够了。所以去别处寻找。

我用drush清除了缓存,仍然是错误,然后查看了数据库表。

我注意到除了cache_update之外,所有缓存表都被清除了。我截断了这张桌子和bam,一切正常。

在我收到内存限制错误之前,我遇到max_input_vars错误,因为我在PHP5.4。但是这个问题和答案促使我解决了这个问题。不太确定它是如何或为何起作用的,但确实如此。