中止连接(读取通信数据包时出错)


8

mysql error.log显示

[Warning] Aborted connection 320935 to db: '...' user: '...' host: '...' (Got an error reading communication packets)

客户端得到的是:

Lost connection to MySQL server at 'reading initial communication packet', system error: 111
Lost connection to MySQL server at 'reading authorization packet', system error: 0
and after a while: Host '...' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

我读了关于这的mysql手册,以及许多其他线程。所以我在my.cnf中更改了一些值

max_allowed_packet      = 512M
connect_timeout = 60
net_read_timeout = 120
innodb_buffer_pool_size = 5G

查看了断开连接的查询日志:

22400 Connect user@host on dbname
22400 Query SELECT @@sql_mode
22400 Query     SET SESSION sql_mode=''
22400 Query     SET NAMES utf8
22400 Init DB   dbname
22400 Init DB   dbname

检查表状态。bind-address是服务器IP,但我需要能够从外部连接。

Aborted_connects is 196

您可以检查两个主机之间的连接质量吗?基本100坪应该做..
2014年

Answers:


4

基于有限的数据,我想知道您是否在客户端和MySQL服务器之间建立了防火墙(它可能直接在主机上),该防火墙允许MySQL服务器使用3306,但阻止了对初始SYN请求的响应数据包。

您可能希望在双方都执行数据包转储,以弄清TCP方面正在发生的事情,并且/或者检查双方之间是否存在防火墙。


谢谢。我可以提供哪些数据来清除此问题?我一端没有防火墙,也不确定另一端。大多数情况下,连接有效,因此我认为它不是防火墙。我尝试了数据包转储,但流量很大,而且每天仅出现几次该问题。我未能定义仅捕获所需数据包的过滤器。
PiTheNumber 2014年

4

我怀疑这不是mysql问题。

验证传输层是否正常。可以使用建立TCP连接telnet [db_server] 3306吗?

您的客户端和服务器是否同意对连接进行SSL加密?

我想不出要在公共互联网上运行mysql连接的许多情况,我怀疑这是您“可以从外部连接”的意思。如果未加密,则将带来巨大的安全风险,并且对于大多数用途而言,为每个连接设置SSL的开销过高。您可能想看看使用某种持久性加密隧道。


telnet连接,大多数连接仅在不时出现此问题。是的,这是通过公共互联网的连接。我想在这里进行加密,但我无法控制另一端。无论如何,我首先需要稳定连接。
PiTheNumber 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.