相关参数: mysql> show variables like '%max_connect_errors%'; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | max_connect_errors | 3 | +--------------------+-------+ 1 row in set (0.00 sec) 如果一台主机连续请求MySQL,而这些请求由于网络延迟都没有成功建立连接就被中断了,当这些连续的请求累计值大于该参数时,MySQL服务器就会阻止这台主机后续的所有请求。 mysql> show variables like '%connect_timeout%'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | connect_timeout | 10 | +-----------------+-------+ 1 row in set (0.00 sec) 客户端与MySQL建立连接需要三次握手,正常情况下时间很短,但是网络波动会导致延迟,就会导致这个握手协议无法完成,如果超过该参数(默认10秒)还没有完成3次握手,则客户端会收到Lost connection to MySQL server at 'XXX', system error: errno错误,并且累计错误连接数。 mysql> desc performance_schema.host_cache; +--------------------------------------------+------------------+------+- | Field | Type | Null | +--------------------------------------------+------------------+------+- | IP | varchar(64) | NO | | HOST | varchar(255) | YES | | HOST_VALIDATED | enum('YES','NO') | NO | | SUM_CONNECT_ERRORS | bigint(20) | NO | | COUNT_HOST_BLOCKED_ERRORS | bigint(20) | NO | | COUNT_NAMEINFO_TRANSIENT_ERRORS | bigint(20) | NO | | COUNT_NAMEINFO_PERMANENT_ERRORS | bigint(20) | NO | | COUNT_FORMAT_ERRORS | bigint(20) | NO | | COUNT_ADDRINFO_TRANSIENT_ERRORS | bigint(20) | NO | | COUNT_ADDRINFO_PERMANENT_ERRORS | bigint(20) | NO | | COUNT_FCRDNS_ERRORS | bigint(20) | NO | | COUNT_HOST_ACL_ERRORS | bigint(20) | NO | | COUNT_NO_AUTH_PLUGIN_ERRORS | bigint(20) | NO | | COUNT_AUTH_PLUGIN_ERRORS | bigint(20) | NO | | COUNT_HANDSHAKE_ERRORS | bigint(20) | NO | | COUNT_PROXY_USER_ERRORS | bigint(20) | NO | | COUNT_PROXY_USER_ACL_ERRORS | bigint(20) | NO | | COUNT_AUTHENTICATION_ERRORS | bigint(20) | NO | | COUNT_SSL_ERRORS | bigint(20) | NO | | COUNT_MAX_USER_CONNECTIONS_ERRORS | bigint(20) | NO | | COUNT_MAX_USER_CONNECTIONS_PER_HOUR_ERRORS | bigint(20) | NO | | COUNT_DEFAULT_DATABASE_ERRORS | bigint(20) | NO | | COUNT_INIT_CONNECT_ERRORS | bigint(20) | NO | | COUNT_LOCAL_ERRORS | bigint(20) | NO | | COUNT_UNKNOWN_ERRORS | bigint(20) | NO | | FIRST_SEEN | timestamp | NO | | LAST_SEEN | timestamp | NO | | FIRST_ERROR_SEEN | timestamp | YES | | LAST_ERROR_SEEN | timestamp | YES | +--------------------------------------------+------------------+------+ 每次连接超时失败会在SUM_CONNECT_ERRORS和COUNT_HANDSHAKE_ERRORS字段累计,当累计到max_connect_errors时就会收到is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts错误。 解决: 根本的解决方法还是需要解决网络波动问题;临时解决可以通过调整max_connect_errors参数来解决,但是如果一个高负载的系统再业务高峰期是可能error很快回累计到很大的值。 |
|