php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #81335 PHP Warning, Packets out of order after connection timeout
Submitted: 2021-08-06 10:37 UTC Modified: 2021-09-14 12:27 UTC
Votes:2
Avg. Score:3.0 ± 0.0
Reproduced:2 of 2 (100.0%)
Same Version:0 (0.0%)
Same OS:1 (50.0%)
From: bohuslav at simek dot si Assigned:
Status: Verified Package: PDO MySQL
PHP Version: 7.4.22 OS: Alpine Linux 3.14
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: bohuslav at simek dot si
New email:
PHP Version: OS:

 

 [2021-08-06 10:37 UTC] 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.


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2021-08-06 12:43 UTC] dharman@php.net
-Status: Open +Status: Verified
 [2021-08-06 12:43 UTC] 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 18:16 UTC] 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-09-14 12:27 UTC] 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-09-30 20:23 UTC] 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).
 
PHP Copyright © 2001-2021 The PHP Group
All rights reserved.
Last updated: Wed Oct 20 19:03:32 2021 UTC