我的一个暂存网站最近开始在每个管理页面上喷出巨大的错误:
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会有什么用处,因为它被调用了很多吗?
答案 0 :(得分:5)
无需跟踪此情况,因为我认为你无法修复它。
这是来自update.module的缓存,包含有关哪些模块具有更新版本的信息等。所以这来自该模块中的一个“_update_cache_set()”调用。
根据一个疯狂的猜测,我会说它是这个函数中的一个:http://api.drupal.org/api/drupal/modules--update--update.fetch.inc/function/_update_refresh/6
它基本上构建了一个巨大的数组,其中包含有关您网站上所有项目的信息,并尝试将其存储为单个序列化值。
您在此网站上安装了多少个模块?
我可以想出三种方法来“修复”这个错误:
答案 1 :(得分:1)
我遇到了类似的错误,并且绕了大约一个小时。
将内存限制增加到512m
并仍然存在问题。并认为这就足够了。所以去别处寻找。
我用drush清除了缓存,仍然是错误,然后查看了数据库表。
我注意到除了cache_update之外,所有缓存表都被清除了。我截断了这张桌子和bam,一切正常。
在我收到内存限制错误之前,我遇到max_input_vars
错误,因为我在PHP5.4
。但是这个问题和答案促使我解决了这个问题。不太确定它是如何或为何起作用的,但确实如此。