首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 主機被封鎖 (Host 'host_name' is blocked) 解封與預防:max_connect_errors、FLUSH HOSTS 與網路診斷

     編輯:MySQL 資料庫相關知識

錯誤訊息

Host 'host_name' is blocked because of many connection errors.
Unblock with 'mysqladmin flush-hosts'

觸發機制

  • 計數器:max_connect_errors (預設 100,舊版 10)。
  • 條件:連線階段錯誤 (握手失敗、認證失敗、封包損毀) 累計達閾值。
  • 動作:該 IP 加入封鎖快取,後續連線直接拒絕,不再消耗線程資源。

即時解封

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 → 持續監控連線錯誤率。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved