reading initial communication packet

这两天线上服务报了非常多的Error,具体内容如下:

SQLSTATE[HY000] [2013] Lost connection to MySQL server at 'reading initial communication packet', system error: 104

 

DBA说没有找到MySQL错误日志,网上搜索了一圈也没有找到满意答案。只好自己动手查MySQL源码,查到如下代码:

 

./libmysql/client.c

继续跟cli_safe_read函数,是这么定义的:

注释是我添加的,继续往下跟my_net_read函数,函数在libmysql/net.c 中,有点长,不全贴出来了。

在my_net_read函数中,有几种情况会报error:

  • 啥也没读到,会重试,重试也不行,会报:ER_NET_FCNTL_ERROR、ER_NET_READ_INTERRUPTED或者ER_NET_READ_ERROR
  • 读到了,但是package有问题,会报:ER_NET_PACKETS_OUT_OF_ORDER
  • 之后在net_realloc的时候,还会报两种错误。

 没有环境权限、没法复现,dba说明天抓包分析一下,只能先这样了。

 


版权声明:本文为sandysong28原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。