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

Mat*_* V. 4 mysql debugging caching drupal 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会有什么好处,因为它被调用了这么多?

Ber*_*dir 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(无论如何,当你需要首先在开发站点上更新时,它在暂存/生产站点上没那么有用)
  • 禁用一些模块;)