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

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

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

答案1

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

您可能需要在两侧执行数据包转储,以查明 TCP 侧发生的情况和/或检查两侧之间存在的任何防火墙。

答案2

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

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

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

我想不出有多少情况我会想要通过公共互联网运行 mysql 连接,我怀疑这就是你所说的“能够从外部连接”。如果不加密,这是一个巨大的安全风险,而且为每个连接设置 SSL 的开销对于大多数用途来说太高了。你可能想考虑使用某种持久加密隧道。

答案3

中止连接被视为 MySQL 中的连接错误,可能不会记录在 MySQL 错误日志中。请参阅断开 TCP 连接未记录为错误但导致主机被阻止

相关内容