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

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 

检查表状态。 绑定地址是服务器IP,但我需要能够从外部连接。

 Aborted_connects is 196 

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

您可能希望在双方执行数据包转储以解决TCP端发生的事情和/或检查双方之间存在的任何防火墙。

我怀疑这不是一个MySQL问题。

validation传输层是否正常。 你可以用telnet [db_server] 3306获得一个tcp连接吗?

您的客户端和服务器是否应该对SSL进行SSLencryption达成一致?

我不能想到很多情况下,我想通过公共互联网运行一个MySQL连接,我怀疑你是什么意思的“能够从外部连接”。 如果未encryption,这是一个巨大的安全风险,为每个连接设置SSL的开销对于大多数用途而言过高。 你可能想看看使用某种持久的encryption隧道。

中止的连接被认为是MySQL中的一个连接错误,它可能没有logging在MySQL错误日志中。 查看丢弃的TCP连接没有logging为错误,但导致主机被阻止 。