MySQL 5.5:“读取通信包时出错”

时间:2015-01-27 17:26:09

标签: mysql mysql-5.5

我刚刚将MySQL从 5.1 升级到 5.5

我修复了一些运行mysql_upgrade的问题,并更改了一些已弃用的配置......

我还更新了PHP,从5.3.3-75.3.29-1

但是,既然如此,我遇到了一个问题(总是按此顺序抛出):


1。客户* - PHP警告

  

警告:数据包乱序。预期1收到0.数据包大小= 1 in   /home/www/www.mywebsite.com/shared/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php   第694行

2。客户* - PHP警告

  

警告:PDOStatement :: execute()[pdostatement.execute]:读取错误   结果集的标题   /home/www/www.mywebsite.com/shared/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php   第694行

第3。服务器* - MySQL警告:

  

150127 17:25:15 [警告]中止连接309到db:   'my_database'用户:'root'主机:'127.0.0.1'(出错了   阅读通讯包

4。客户端* - PHP错误

  

PDOStatement :: execute()[pdostatement.execute]: MySQL服务器   已离开   /home/www/www.mywebsite.com/shared/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php   第694行

*注意:我称之为“客户端”的是PHP应用程序,“服务器”是MySQL服务器,即使它们都位于同一个本地主机服务器上。


所以,显然,所有这些问题的根源都是第一个:“数据包乱序”

但是当我搜索这个错误时,我找不到很多答案,而且他们大部分时间与我的问题无关:我使用Doctrine作为抽象,所以我不写任何查询或获取任何结果我。另外,它几乎永远不会和我一样,但在我的情况下我总是得到那些值(“ 预期1收到0.数据包大小= 1 “)。

最接近的结果是this MySQL bug report,但是“一个月内没有为此错误提供反馈,所以它是 被自动暂停“......

另外,我的PHP Doctrine代码没有抛出一些“ 2。”错误(它们不是从我的本地主机执行,而是从另一个已知的外部服务执行,可能使用了一些旧的PHP Propel代码)。

这可能意味着我的MySQL配置本身存在问题,但我尝试更改一些参数而没有获得任何明显的效果(例如,重启MySQL以获取第一个错误后需要更多时间)。

非常感谢任何帮助!

这是我的current configuration (我有2个MySQL实例,第二个使用复制主要是为了只读)。 我还使用Munin检查了大部分系统资源,并没有看到任何异常(例如RAM使用率非常高,但是因为服务器上有50Go,所以它根本不满)。


更新

我隔离了一个从我的PHP客户端反复失败的SQL查询。当我使用MySQL Workbench从我的本地执行时,它完全相同(用MySQL server has gone away消息关闭了连接)。当我从sql命令行执行此操作时,它也执行了相同的操作。然后我从服务器主机上的sql命令行执行它,并且它成功了。但有一段时间后,我再次尝试使用Workbench /无论它工作了什么......所以看起来这些“损坏的数据包”会在一段时间后被缓存并消失。

1 个答案:

答案 0 :(得分:2)

谢谢,我解决了这个问题: 重置QUERY CACHE; FLUSH QUERY CACHE;