Laravel / MySQL 错误:SQLSTATE[HY000]:一般错误:1835 格式错误的通信数据包

Posted

技术标签:

【中文标题】Laravel / MySQL 错误:SQLSTATE[HY000]:一般错误:1835 格式错误的通信数据包【英文标题】:Laravel / MySQL Error: SQLSTATE[HY000]: General error: 1835 Malformed communication packet 【发布时间】:2021-02-17 01:08:00 【问题描述】:

早上好。我在 VPS 服务器上使用 Laravel。

简短的情况描述:昨天一切正常(几个月来我们的网站都运行良好),今天早上我从同事那里醒来,发现我们的两个网站都关闭了。

当尝试访问它们时,我们收到错误:

SQLSTATE[HY000]: 一般错误: 1835 Malformed communication packet (SQL: select * from users where id = 1 limit 1)

我在网上查了一下,没有找到解决办法。我尝试将 mysql 升级到最新版本 (Maria DB 10.3)

我尝试重置数据库用户的密码。 (也没有变化)

我检查并尝试了在 my.cnf 文件中为 mysql 设置设置 read_rnd_buffer_size=256K 的解决方案

当我尝试直接在 phpMyAdmin select * from users where id = 1 limit 1 中调用此函数时,它会返回预期结果。

我会感谢每一个帮助,因为我们所有的业务都依赖于这些平台,我需要尽快让它们发挥作用。

问候,阿蒂斯。

编辑: 当我尝试禁用导致错误的功能时,它只显示下一个功能,并且全部如此。所以我认为 Laravel 根本无法与 mysql 连接。

经过深入研究,我发现只有 Laravel 无法连接到数据库。在同一台服务器上,我有 2 个 Laravel 应用程序、Codeigniter 和 wordpress。两个 Laravel 应用程序同时停止工作,但 codeigniter 和 wordpress 正常工作。

【问题讨论】:

你在使用 MariaDB 吗? 是的。我相信是的。 今天发生在几个人身上 (***.com/questions/64677005/…)。请参阅***.com/questions/64677836/… 以获取解决方案(或者可能只是解决方法)。 @Smuuf 谢谢,我现在就去看看。 :) @Smuuf 谢谢你,你是救生员。 :) 在我检查之前,我没有看到这些主题。如果你把它作为答案,我会批准它。 :) 【参考方案1】:

为了快速修复,只需添加这个

'options' => [PDO::ATTR_EMULATE_PREPARES => true]

到config/database.php中

'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => false,
        'engine' => null,
        'options'   => [PDO::ATTR_EMULATE_PREPARES => true],
    ],

正确的解决方案是将你的 php 从 7.2 升级到 7.4 或降级你的 mariadb

【讨论】:

谢谢@aitbella。这是 MariaDB 最新版本中引入的一个错误:MDEV-24121 这实际上对我有用。我尝试将php版本升级到7.3但没有用,不知道为什么。现在使用此修复程序。谢谢。 不幸的是,将 php 升级到 7.4 对我仍然不起作用@aitbella。尝试了 7.3、7.3 Native 和 7.4,但它们都不起作用。使用至少现在提到的快速修复。【参考方案2】:

新的更新需要 PHP 7.3 才能与 MariaDB 连接。

由于该问题是由 MariaDB MDEV-24121 的最新升级引起的,因此更合适的解决方案是降级 MariaDB 并 yum 锁定 MariaDB 软件包,以避免软件包更新并在修补时解锁它们.更多细节在这里:Updating MariaDB to v10.2.35 or v10.3.26, causes MySQL Databases interface to show MySQL as offline

如果您无法降级 MariaDB 或无法更新 PHP,可能的解决方法是将“PDO::ATTR_EMULATE_PREPARES”设置为 true。

【讨论】:

以上是关于Laravel / MySQL 错误:SQLSTATE[HY000]:一般错误:1835 格式错误的通信数据包的主要内容,如果未能解决你的问题,请参考以下文章

Laravel / MySQL 错误:SQLSTATE[HY000]:一般错误:1835 格式错误的通信数据包

Laravel mysql迁移错误

一般错误:1215 无法添加外键约束,Laravel 5 & MySQL

我收到 Laravel Mysql 连接错误

Laravel MySQL 数据库设置错误

MySQL数据库的Laravel迁移“无法添加外键约束”错误