【问题标题】:Xampp php mysqli warning 'Packets out of order' and 'MySQL server has gone away'Xampp php mysqli 警告“数据包乱序”和“MySQL 服务器已消失”
【发布时间】:2021-10-08 05:53:45
【问题描述】:

我使用 xampp 作为开发服务器,它已经运行了好几个星期。我今天必须重新启动安装 xampp 的机器,现在,今天晚上,我在尝试执行昨天工作的确切事情时遇到错误(警告)。我明白了:

Warning: Packets out of order. Expected 0 received 1. Packet size=23 in C:\xampp\htdocs\project_mgr\api\config\db_connect.php on line 15

Warning: mysqli::__construct(): Error while reading greeting packet. PID=9000 in C:\xampp\htdocs\project_mgr\api\config\db_connect.php on line 15

Warning: mysqli::__construct(): (HY000/2006): MySQL server has gone away in C:\xampp\htdocs\project_mgr\api\config\db_connect.php on line 15
Connect failed: MySQL server has gone away

我可以连接到mysql服务器。我在打印出 mysqli 连接对象时得到了这个:

mysqli Object
(
    [affected_rows] => 0
    [client_info] => mysqlnd 7.4.19
    [client_version] => 70419
    [connect_errno] => 0
    [connect_error] => 
    [errno] => 0
    [error] => 
    [error_list] => Array
        (
        )

    [field_count] => 0
    [host_info] => 127.0.0.1 via TCP/IP
    [info] => 
    [insert_id] => 0
    [server_info] => 5.5.5-10.4.19-MariaDB
    [server_version] => 100419
    [sqlstate] => 00000
    [protocol_version] => 10
    [thread_id] => 473
    [warning_count] => 0
)

phpMyAdmin 似乎也可以正常工作。所有的数据都在那里,mysql肯定在运行。

我没有以任何方式升级或更改 xampp。这令人费解。有什么变化?!

在线阅读,我尝试增加max_allowed_pa​​cket,但无济于事。我又重新启动了机器。多次重启mysql。没有任何效果。我还能尝试什么???

谢谢!

【问题讨论】:

  • 一般来说,当您看到此消息时,表示 PHP 中存在错误或 MySQL 服务器配置错误。如果没有看到 minimal reproducible example 或一些其他详细信息,很难说出是什么触发了此错误。
  • 我会同意这一点,除非服务器配置在此之前一直运行良好。在这种情况下,这是用户错误。我有一个循环函数调用。函数 A 正在调用 B,而 B 正在调用 A。我假设它遇到了这些依赖项并死了。我将函数 B 更改为独立于 A,然后它又可以正常工作了。
  • 欢迎在回答区为以后的读者解释这个解决方案,除非你认为没有人会遇到这样的问题,在这种情况下你可以删除问题
  • 现在。谢谢!

标签: php mysql mysqli


【解决方案1】:

当我从一个函数(函数 A)中提取一段代码并从中创建另一个函数(函数 B)来清理它并防止错误时,问题就出现了。

我没有发现这些函数具有相互依赖关系。函数 A 调用 B,B 调用 A。没有对方,两者都无法返回任何内容。我认为这会绑定系统并杀死它。

我将 B 更改为独立于 A,现在一切都恢复正常了。

【讨论】:

    【解决方案2】:

    尝试在您的 MySQL 中运行此查询以调整 max_allowed_packet 的大小或调整 net_read_timeout

    SET GLOBAL max_allowed_packet=268435456;
    SET GLOBAL net_read_timeout = 1000; 
    

    MySQL server has gone away 错误意味着 MySQL 服务器 (mysqld) 超时并关闭了连接。 Check this here.

    【讨论】:

      猜你喜欢
      • 2013-03-05
      • 2015-03-01
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 2014-11-01
      • 2020-10-28
      • 2015-11-25
      相关资源
      最近更新 更多