Aborted connection报错一般分两种,1)Got an error reading communication packets,基本是网络等原因导致。2)Got timeout reading communication packets,原因基本是会话的idle时间达到了数据库指定的timeout时间。这里主要Got an error reading communication packets报错 2021-01-25T05:54:00.746567Z 1172765 [Note] Aborted connection 1172765 to db: 'xx' user: 'root' host: 'xx.xx.5.12' (Got an error reading communication packets) 2021-01-25T06:13:58.256934Z 1174164 [Note] Aborted connection 1174164 to db: 'xx' user: 'root' host: 'xx.xx.5.12' (Got an error reading communication packets) 2021-01-25T06:14:27.452621Z 1174094 [Note] Aborted connection 1174094 to db: 'xx' user: 'root' host: 'xx.xx.5.12' (Got an error reading communication packets) 2021-01-25T06:18:13.795623Z 1174092 [Note] Aborted connection 1174092 to db: 'xx' user: 'root' host: 'xx.xx.5.11' (Got an error reading communication packets) 2021-01-25T06:18:43.059256Z 1171452 [Note] Aborted connection 1171452 to db: 'xx' user: 'root' host: 'xx.xx.5.11' (Got an error reading communication packets) 2021-01-25T06:25:11.992919Z 1174520 [Note] Aborted connection 1174520 to db: 'xx' user: 'root' host: 'xx.xx.5.11' (Got an error reading communication packets)参考文档: https://www.percona.com/blog/2016/05/16/mysql-got-an-error-reading-communication-packet-errors/首先,当发生 “Got an error reading communication packet” 错误时,它都会为 Aborted_clients或 Aborted_connects递增状态计数器,该计数器描述了由于客户端在没有正确关闭连接而中断的情况下中止的连接数,以及尝试连接到MySQL服务器的失败尝试数。这两个错误的可能原因很多(请参见MySQL 手册中的 Aborted_clients increments or Aborted_connects increments 部分)。
在这种情况下,MySQL为Aborted_clients增加状态 counter ,这可能意味着:
以上不是全部问题列表,要根据具体确定导致此问题的原因以及如何解决。
修复MySQL Communication Errors
连接中断错误不容易诊断。就经验来看,大多数情况下它与网络/防火墙问题有关。我们通常在Percona工具包脚本(即 pt-summary / pt-mysql-summary / pt-stalk)的帮助下调查这些问题。这些脚本的输出可能非常有帮助。
导致连接错误中止的一些原因可能是:
尝试增加MySQL的 net_read_timeout和 net_write_timeout值,看看是否可以减少错误数量。 除非网络比较差,否则 很少会成为问题。可以试调整这些值,因为在大多数情况下,查询是作为单个数据包生成并发送到服务器的,并且应用程序无法切换为做其他事情,而会使服务器保留部分接收到的查询。 可以参考文章https://www.percona.com/blog/2007/07/08/mysql-net_write_timeout-vs-wait_timeout-and-protocol-notes/。
由于异常,所以发生中断连接。除非服务器和客户端之间存在网络问题(例如服务器为半双工,而客户端为全双工),否则服务器不会导致连接异常终止--这是网络引起的问题。此类问题应该在网络接口上排查。 通过 检查 MySQL服务器上输出,以检查是否有错误。
另一种方法是通过 。您可以参考此博客文章( https://www.percona.com/blog/2008/08/23/how-to-track-down-the-source-of-aborted_connects/),以 了解如何追踪中止连接的来源。使用MySQL查找潜在的网络问题,超时和资源问题。
可以参考该文章( https://www.percona.com/blog/2011/04/18/how-to-use-tcpdump-on-very-busy-hosts/)在负载的主机上使用 非常有用 。它为跟踪导致连接中断的TCP交换序列提供了帮助,排查原因。
对于网络问题,请使用ping来计算mysqld所在的计算机与应用程序发出请求的计算机之间的往返时间(RTT)。在客户端和服务器计算机之间发送一个大文件(1GB或更大),使用 监视该过程 ,然后检查传输过程中是否发生错误。重复此测试几次。参考博文http://www.tusacentral.net/joomla/index.php/mysql-blogs/164-effective-way-to-check-the-network-connection-when-in-need-of-a-geographic-distribution-replication-.html。
另外是 每N秒后时间戳一起输出来进行排查(例如,10秒钟,这样你可以涉及 之前和之后从MySQL错误日志中止连接错误输出) 。与被中断的连接错误时戳,则可以与共同涉及它 捕获作为每一个样本的时间戳 ,和其中手表错误计数器下的TcpExt部分增加 。
除此之外,还应该检查位于客户端和服务器之间的网络基础结构,以查找可能引起问题的代理,负载平衡器和防火墙。除了诊断通信故障错误之外,您还需要考虑可能导致此问题的以太网,集线器,交换机,电缆等故障。
