代码改变世界

MySQL Error Log: Got packets out of order

2024-09-18 14:29  abce  阅读(199)  评论(0编辑  收藏  举报

在MySQL错误日志中发现有偶发的如下信息:

2024-09-13T15:55:29.489324+08:00 26750047 [Note] [MY-010914] [Server] Got packets out of order
2024-09-13T15:55:29.544688+08:00 26750048 [Note] [MY-010914] [Server] Got packets out of order
2024-09-13T15:55:29.590259+08:00 26750049 [Note] [MY-010914] [Server] Got packets out of order
2024-09-13T15:55:29.658435+08:00 26750090 [Note] [MY-010914] [Server] Got packets out of order
2024-09-13T15:55:29.686936+08:00 26750091 [Note] [MY-010914] [Server] Got packets out of order
2024-09-13T15:55:29.707194+08:00 26750092 [Note] [MY-010914] [Server] Got packets out of order
2024-09-13T15:55:29.758550+08:00 26750093 [Note] [MY-010914] [Server] Got packets out of order

MySQL Server在遇到网络问题的时候,会发生MY-010914错误,比如:

·与数据库的连接中断

·握手失败

·读取通信数据包时出现错误

·拒绝用户访问...

·写入通信数据包出错

·...

 

还可以使用 Performance_Schema.error_log 表直接在 SQL 中找到这些错误信息:

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

那么,既然我们看到了这些错误信息,它们是从哪里来的呢?这些错误很有可能是由 MySQL Shell 引起的!

 

如果使用 MySQL Shell 连接 MySQL,提供了端口但没有提供协议,MySQL Shell 会首先尝试使用 X 协议,如果失败,就会使用经典协议。

 

例如,此命令将在 MySQL 错误日志中产生一个Got packets out of order错误:

$ mysqlsh root@localhost:3306

不过,这个问题已经在MySQL Shell 9.0中得到了修复。

 

MySQL Shell 指定协议就能解决这个问题:

$ mysqlsh mysql://root@localhost:3306

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