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为错误,但导致主机被阻止 。