【问题标题】:How to track down a Drupal max_allowed_packet error?如何追踪 Drupal max_allowed_pa​​cket 错误?
【发布时间】:2011-02-23 06:02:55
【问题描述】:

我的一个临时站点最近开始在每个管理页面上出现 巨大 错误,如下所示:

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 会有什么好处,因为它被调用了这么多?

【问题讨论】:

    标签: mysql debugging drupal caching drupal-6


    【解决方案1】:

    没有必要追踪这个,因为我认为你无法修复它。

    这是来自 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(无论如何,当您需要先在开发站点上更新时,它在暂存/生产站点上并没有那么有用)
    • 禁用某些模块 ;)

    【讨论】:

    • 谢谢!我会检查一下,可能有一些模块我可以禁用。您认为禁用就足够了,还是我需要卸载它们?知道为什么它会如此频繁地刷新缓存吗?
    • 如果您收到该错误,则说明数据库未更新。下次运行时,缓存仍然过时,它会再次尝试更新。禁用模块应该足以不为它们寻找更新,但不知道禁用一些模块是否会消除该错误。
    • 这对我有帮助,谢谢!核心中的更新模块 - 可选是一个问题,它无法存储巨大的 blob,然后侮辱伤害并试图在看门狗中记录这个巨大的 blob:/
    【解决方案2】:

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

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

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

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

    在我收到内存限制错误之前,我收到了一个max_input_vars 错误,因为我在PHP5.4 上。但是这个问题和答案使我得到了这个修复。不太清楚它是如何或为什么起作用的,但确实如此。

    【讨论】:

      猜你喜欢
      • 2011-12-25
      • 2017-11-12
      • 2023-02-13
      • 1970-01-01
      • 2015-08-31
      • 2012-12-11
      • 2012-02-07
      • 1970-01-01
      • 2013-06-16
      相关资源
      最近更新 更多