相關引數:
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很快回累計到很大的值,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/255546.html
標籤:MySQL
