Bug #81335 [Com]: PHP Warning, Packets out of order after connection timeout

From: 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

« previous php.bugs (#240253) next »