代码改变世界

MySQL 日志报错:Got packets out of order

2025-09-09 15:11  abce  阅读(131)  评论(0)    收藏  举报

数据库错误日志偶尔会报如下错误:

2025-08-17T03:02:25.931797+08:00 225756739 [Note] [MY-010914] [Server] Got packets out of order

 

MY-010914 错误和网络问题有关,比如:

·Aborted connection XX to db: …
·Bad handshake
·Got an error reading communication packets
·Access denied for user…
·Got an error writing communication packets

 

也可以从数据库表中直接看到该错误信息。比如:

select logged, error_code, data from performance_schema.error_log where error_code='MY-010914' and data like 'Got pac%';

 

这些错误信息是从何而来的呢?这些错误很可能是由 MySQL Shell 引发的!

 

当使用 MySQL Shell 连接 MySQL 时,若仅指定端口而未指定协议,MySQL Shell 会优先尝试使用 X 协议,若失败则转而使用经典协议。

 

例如,执行以下命令会在 MySQL 错误日志中产生 "Got packets out of order" 的报错:

mysqlsh root@localhost:3306

 

此问题已在 MySQL Shell 9.0 中修复。

 

如果使用 MySQL Shell 8.0 或 8.4 版本(尽管官方始终建议使用最新版本的 MySQL Shell),则无需使用与 MySQL 服务器版本相同的 MySQL Shell 版本,指定协议即可解决此问题:

mysqlsh mysql://root@localhost:3306

MySQL Shell 支持类似 protocol://user@host:port 的 URI 格式,其中协议可以是 mysql 或 mysqlx。