Bug #81335 [Com]: PHP Warning, Packets out of order after connection timeout
| From: | maurice dot volaski at einsteinmed dot edu | Date: | Mon, 07 Mar 2022 16:20:31 +0000 |
| Subject: | Bug #81335 [Com]: PHP Warning, Packets out of order after connection timeout | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-240253@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=81335&edit=1
ID: 81335
Comment by: maurice dot volaski at einsteinmed dot edu
Reported by: bohuslav at simek dot si
Summary: PHP Warning, Packets out of order after connection
timeout
Status: Verified
Type: Bug
Package: PDO MySQL
Operating System: Alpine Linux 3.14
PHP Version: 7.4.22
Block user comment: N
Private report: N
New Comment:
I am seeing this on my Mac with PHP 8.1.2 (Apache module) and MySQL 8.0.28 Homebrew.
Previous Comments:
------------------------------------------------------------------------
[2021-09-30 20:23:49] vovikems at gmail dot com
Having same error using official docker images: php:8.0.9-cli and mysql:8.0.26. Typically this error
seen on first DB query since long time (about 10h-15h) keeping DB connection without any query sent.
Next query is always ok.
FYI i'm using long-running php application (RoadRunner, Spiral Framework, CycleORM).
------------------------------------------------------------------------
[2021-09-14 12:27:24] cmb@php.net
Oops, forgot about this. Anyway, result with git-master and MySQL
8.0.26:
SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
Is this Linux specific?
------------------------------------------------------------------------
[2021-08-06 18:16:59] cmb@php.net
With MySQL 5.6.44 and 8.0.19 I get:
SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
I'm waiting for the update to 8.0.26 to finish for about eight
hours now. I'll test with that version when it's finished (if it
ever finishes).
------------------------------------------------------------------------
[2021-08-06 12:43:21] dharman@php.net
Thanks for reporting. This indeed should be fixed in mysqlnd. Tested on git.master and the mysqlnd
client doesn't notice the connection has dropped when sending a query.
------------------------------------------------------------------------
[2021-08-06 10:37:58] bohuslav at simek dot si
Description:
------------
After migration from MySQL 8.0.23 to 8.0.25 a warning "Packets out of order. Expected 1
received 0. Packet size=145" will be shown after MySQL connection timeout. mysqlnd is used a as
connection library.
pdo_mysql
PDO Driver for MySQL => enabled
Client API version => mysqlnd 8.0.8
I don't want to speculate, but this can be caused by changes introduce in Connection Management
by MySQL 8.0.24 (https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-24.html header Connection
Management Notes) as MySQL now provides reason why client has been disconnected.
Test script:
---------------
<?php declare(strict_types=1);
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_PERSISTENT => false,
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET time_zone = "UTC"',
PDO::ATTR_EMULATE_PREPARES => true,
];
$pdo = new PDO(
'mysql:dbname=unit_tests;host=mysql-test;port=3306;charset=utf8mb4',
'root',
'',
$options
);
$pdo->exec('SET SESSION wait_timeout=1');
sleep(3);
$pdo->exec('SELECT 123'); // PHP Warning: Packets out of order. Expected 1 received 0.
Packet size=145
Expected result:
----------------
warning "Packets out of order. Expected 1 received 0. Packet size=145" should not happen.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=81335&edit=1