【发布时间】:2015-01-27 17:26:09
【问题描述】:
我刚刚将 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 [警告] 与 db 的连接 309 已中止: “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 行
*NB:我所说的“客户端”是 PHP 应用程序,而“服务器”是 MySQL 服务器,即使它们都在同一个 localhost 服务器上。
所以,显然,所有这些问题的根源是第一个:“数据包乱序”。
但是当我搜索这个错误时,我找不到很多答案,而且它们大多数时候与我的问题无关:我使用 Doctrine 作为抽象,所以我不编写任何查询或获取任何结果我。另外,它的值几乎与我不同,但在我的情况下 我总是得到这些值(“预期 1 收到 0。数据包大小=1强>")。
最接近的结果是this MySQL bug report,但是“一个多月没有为这个错误提供任何反馈,所以它是 被自动暂停”...
另外,一些“2.”错误不是由我的 PHP Doctrine 代码引发的(它们不是从我的本地主机执行的,而是从另一个已知的外部服务执行的,可能使用了一些旧的PHP Propel 代码)。
所以这可能意味着我的 MySQL 配置本身存在问题,但我尝试更改一些参数但没有获得任何明显效果(例如,有时在重新启动 MySQL 后需要更多时间才能获得第一个错误)。
任何帮助将不胜感激!
这是我的current configuration (我有 2 个 MySQL 实例,第二个使用复制的实例主要用于只读)。 我还用Munin检查了大部分系统资源,没有发现任何异常(例如RAM使用率很高,但是服务器上有50Go,根本没有满)。
更新
我从我的 PHP 客户端中隔离了一个反复失败的 SQL 查询。当我使用 MySQL Workbench 从本地执行时,它的效果完全相同(使用 MySQL server has gone away 消息关闭连接)。当我从sql 命令行执行此操作时,它也执行相同操作。然后我从服务器主机上的sql 命令行执行它,它成功了。但是过了一段时间,当我从 Workbench 再次尝试/不管它工作时......所以看起来那些“损坏的数据包”被缓存并在一段时间后消失了。
【问题讨论】: