我刚刚将MySQL从 5.1 升级到 5.5 。
我修复了一些运行mysql_upgrade
的问题,并更改了一些已弃用的配置......
我还更新了PHP,从5.3.3-7
到5.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 /无论它工作了什么......所以看起来这些“损坏的数据包”会在一段时间后被缓存并消失。
答案 0 :(得分:2)
谢谢,我解决了这个问题: 重置QUERY CACHE; FLUSH QUERY CACHE;