Bug #81335 [Ver]: PHP Warning, Packets out of order after connection timeout
| From: | cmb@php.net | Date: | Tue, 14 Sep 2021 12:27:25 +0000 |
| Subject: | Bug #81335 [Ver]: PHP Warning, Packets out of order after connection timeout | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-236584@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
Updated by: cmb@php.net
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:
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?
Previous Comments:
------------------------------------------------------------------------
[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