这两天线上服务报了非常多的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说明天抓包分析一下,只能先这样了。