Host 'host_name' is blocked because of many connection errors.
Unblock with 'mysqladmin flush-hosts'
max_connect_errors (預設 100,舊版 10)。mysqladmin flush-hosts
# 或 SQL
FLUSH HOSTS;
| 現象 | 可能原因 | 排查指令 |
|---|---|---|
| 應用報連線失敗 | 網路抖動、防火牆間歇性丟包 | ping -c 100、mtr、tcpdump -i eth0 port 3306 |
| 認證失敗激增 | 密碼錯誤、帳號被暴力掃描 | grep 'Access denied' /var/log/mysql/error.log |
| 握手超時 | connect_timeout 過短、SSL 握手失敗 | openssl s_client -connect host:3306 |
| DNS 解析失敗 | skip-name-resolve=OFF 且 DNS 不穩 | dig +short host_name、啟用 skip-name-resolve |
[mysqld]
max_connect_errors = 100000 # 避免誤封,配合監控告警
connect_timeout = 10
skip-name-resolve = 1 # 禁用 DNS 反查,提速並避免 DNS 故障誤判
Aborted_connects 速率 > 10/min → 告警。Host_cache 表 (performance_schema.host_cache) 定期巡檢 COUNT(*) WHERE SUM_CONNECT_ERRORS > 10。fail2ban 封禁惡意 IP,而非依賴 MySQL 內建封鎖。Host blocked 是網路/應用/安全異常的症狀,而非根因。標準化處置:FLUSH HOSTS 解封 → 根因分類診斷 → 修復網路/應用/安全配置 → 調大 max_connect_errors 配合外部 fail2ban → 持續監控連線錯誤率。