MySQL中的Got an error reading communication packet

MySQL中的Got an error reading communication packet
Mr.蓝桉我们经常在MySQL的error log中可以看到这样的[Note],从官网的介绍来说,导致下述这种情况出现的原因,有下述几种
https://dev.mysql.com/doc/refman/8.0/en/communication-errors.html
另外我们要清楚,Got an error reading communication packets:是客户端异常关闭之后DB才会被动打印的日志,不是DB主动关闭的。所以首要排查方向应该是应用侧,非db侧。如果是客户端超过wait_timeout不活动被DB主动关闭的话,应该打印的日志是:Got timeout reading communication packets
场景分析
客户端使用mycli和mysql分别去连接
mycli
可以看到使用mycli连接后Aborted_clients 增加,并且错误日志中出现
[Note] [MY-010914] [Server] Aborted connection 9 to db: ‘unconnected’ user: ‘root’ host: ‘localhost’ (Got an error reading communication packets)
mysql
而使用mysql连接后则没有这个问题
针对mycli连接时出现的这个情况进行了抓包分析,可以看到38行有个[FIN,ACK]的Flags,查看传输层的信息发现是客户端主动关闭了连接,This frame initiates the connection closing。查看39行,可以看到应用层返回了
Error message: Got an error reading communication packets,并且在40行可以看到RST的Flags,这里可能和mycli的客户端行为有关
而使用mysql连接时查看返回的抓包情况并没有RST的Flags
















