aio-libs / aiomysql

aiomysql is a library for accessing a MySQL database from the asyncio
https://aiomysql.rtfd.io
MIT License
1.72k stars 254 forks source link

Get InternalError: Packet sequence number wrong - got 1 expected 2 #971

Closed xiaoxinw closed 6 months ago

xiaoxinw commented 7 months ago

Describe the bug

Im using aiomysql with SQLAlchemy and pool is enabled. aiomysql==0.2.0 SQLAlchemy==2.0.20 The session is created with current task scope. But now it often runs into this packet sequence number wrong error.

To Reproduce

No

Expected behavior

No

Logs/tracebacks

File "/usr/local/lib/python3.11/site-packages/sqlalchemy/orm/session.py", line 2134, in _execute_internal

    conn = self._connection_for_bind(bind)

           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/orm/session.py", line 2001, in _connection_for_bind

    return trans._connection_for_bind(engine, execution_options)

           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "<string>", line 2, in _connection_for_bind

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/orm/state_changes.py", line 139, in _go

    ret_value = fn(self, *arg, **kw)

                ^^^^^^^^^^^^^^^^^^^^

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/orm/session.py", line 1126, in _connection_for_bind

    conn = bind.connect()

           ^^^^^^^^^^^^^^

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 3264, in connect

    return self._connection_cls(self)

           ^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 147, in __init__

    Connection._handle_dbapi_exception_noconnection(

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 2426, in _handle_dbapi_exception_noconnection

    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 145, in __init__

    self._dbapi_connection = engine.raw_connection()

                             ^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 3288, in raw_connection

    return self.pool.connect()

           ^^^^^^^^^^^^^^^^^^^

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/pool/base.py", line 452, in connect

    return _ConnectionFairy._checkout(self)

           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/pool/base.py", line 1267, in _checkout

    fairy = _ConnectionRecord.checkout(pool)

            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/pool/base.py", line 716, in checkout

    rec = pool._do_get()

          ^^^^^^^^^^^^^^

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/pool/impl.py", line 169, in _do_get

    with util.safe_reraise():

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/util/langhelpers.py", line 147, in __exit__

    raise exc_value.with_traceback(exc_tb)

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/pool/impl.py", line 167, in _do_get

    return self._create_connection()

           ^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/pool/base.py", line 393, in _create_connection

    return _ConnectionRecord(self)

           ^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/pool/base.py", line 678, in __init__

    self.__connect()

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/pool/base.py", line 902, in __connect

    with util.safe_reraise():

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/util/langhelpers.py", line 147, in __exit__

    raise exc_value.with_traceback(exc_tb)

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/pool/base.py", line 898, in __connect

    self.dbapi_connection = connection = pool._invoke_creator(self)

                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/create.py", line 637, in connect

    return dialect.connect(*cargs, **cparams)

           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/default.py", line 615, in connect

    return self.loaded_dbapi.connect(*cargs, **cparams)

           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/dialects/mysql/aiomysql.py", line 256, in connect

    await_only(creator_fn(*arg, **kw)),

    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 125, in await_only

    return current.driver.switch(awaitable)  # type: ignore[no-any-return]

           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/local/lib/python3.11/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 185, in greenlet_spawn

    value = await result

            ^^^^^^^^^^^^

  File "/usr/local/lib/python3.11/site-packages/aiomysql/connection.py", line 75, in _connect

    await conn._connect()

  File "/usr/local/lib/python3.11/site-packages/aiomysql/connection.py", line 540, in _connect

    await self._request_authentication()

  File "/usr/local/lib/python3.11/site-packages/aiomysql/connection.py", line 844, in _request_authentication

    auth_packet = await self._read_packet()

                  ^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/local/lib/python3.11/site-packages/aiomysql/connection.py", line 629, in _read_packet

    raise InternalError(

sqlalchemy.exc.InternalError: (pymysql.err.InternalError) Packet sequence number wrong - got 1 expected 2

Python Version

3.11.0

aiomysql Version

0.2.0

PyMySQL Version

1.1.0

SQLAlchemy Version

2.0.20

OS

Linux

Database type and version

8.0.28

Additional context

No response

Code of Conduct

xiaoxinw commented 6 months ago

I have figured out this issue, the connect request to mysql is timeout and mysql return a error packet with sequence id 1