在MySQL中读取通信数据包时出错

在MySQL中读取通信数据包时出错,mysql,Mysql,我得到了MySQL错误 “读取通信数据包时出错” 在MySQL.err文件和我的应用程序端,我得到了2013错误(在查询过程中失去了连接) 所有超时值均为(以秒为单位): 如何解决这个问题?如果您升级了mysql,也许您可以: mysql_upgrade -u root -p --force 当brew将mysql从5.6.x升级到5.7.x时,这对我很有帮助。由于这一点的价值,这个模糊的错误在许多可能的罪魁祸首中有些常见 通常情况下,MySql本身不是问题,而是系统或调用程序的问题。例如,有

我得到了MySQL错误

“读取通信数据包时出错”

在MySQL.err文件和我的应用程序端,我得到了2013错误(在查询过程中失去了连接)

所有超时值均为(以秒为单位):


如何解决这个问题?

如果您升级了mysql,也许您可以:

mysql_upgrade -u root -p --force

当brew将mysql从5.6.x升级到5.7.x时,这对我很有帮助。由于这一点的价值,这个模糊的错误在许多可能的罪魁祸首中有些常见

通常情况下,MySql本身不是问题,而是系统或调用程序的问题。例如,有时您将php内存限制设置为低,或者从未设置交换驱动器……这会使php和MySQL崩溃,对于发生的情况,您感到困惑

在我的例子中,我没有这样做,但我试图对一个包含非utf8字符的字符串进行json_编码,这将导致默认失败,并将mysql拖到下面。除此之外,PHP7中的OPCache似乎存在严重缺陷,并且缺少正确的错误日志记录。我也不得不禁用它……然后我在/var/log/mysql/error.log中的“通信包”问题神奇地消失了


希望这有助于某人…给了我很多悲伤。

另一个非常奇怪的角落案例:检查内存和交换

如果您没有足够的RAM和交换空间,您的操作系统可能会决定在MySQL中终止导致您的确切错误的进程(
在读取通信数据包时出错)。在虚拟机中,这是一种常见的情况,提供商通常不为交换安装任何分区(并且通常人们没有支付足够的RAM)

因此,请使用
top
htop
再次检查,以验证是否使用了~100%的RAM,或者是否没有足够的交换空间(或者根本没有交换空间)

在这种情况下,购买更多RAM或在您的发行版中搜索“如何安装swapfile”


如果不是这样,请参阅其他答案。干杯!:)

也许可以尝试使用keepalive来确保连接未关闭?但它能解决问题吗?这解决了我的问题,是的,你救了我一天。在我的情况下,php fpm崩溃了。我检查了dmesg,发现
php fpm[6489]:在libGeoIP.so.1.6.11中28 ip 00007f4382ac8c55 sp 00007ffe277e3280错误4的segfault
mysql_upgrade -u root -p --force