1

我刚刚将 MySQL 从5.1升级到5.5

我修复了一些运行问题mysql_upgrade,并更改了一些不推荐使用的配置......

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

但是,从那以后,我遇到了一个经常出现的问题(总是按这个顺序抛出):


1. 客户端* - PHP 警告

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

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 ”)。

最接近的结果是这个 MySQL 错误报告,但是“一个多月没有为这个错误提供任何反馈,所以它正在自动暂停”......

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

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

任何帮助将不胜感激!

这是我当前的配置 (我有 2 个 MySQL 实例,第二个使用复制的实例主要用于只读)。我还用 Munin 检查了大部分系统资源,没有发现任何异常(例如 RAM 使用率很高,但由于服务器上有 50Go,它根本没有满)。


更新

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

4

1 回答 1

2

谢谢,我解决了这个问题:RESET QUERY CACHE; 刷新查询缓存;

于 2016-04-08T10:49:45.883 回答