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

MySQL 主機被封鎖:Host 'host_name' is blocked 解決方案與預防

     編輯:MySQL 資料庫相關知識

錯誤現象

ERROR 1129 (HY000): Host 'host_name' is blocked because of many connection errors.
Unblock with 'mysqladmin flush-hosts'

觸發機制

  • MySQL 維護一個主機錯誤計數器,記錄中斷的連線嘗試(非認證失敗)。
  • 預設閾值 max_connect_errors = 10,超過即封鎖該主機後續連線。
  • 封鎖動作由 mysqld 記憶體內執行,重啟 MySQL 亦可解除,但不解決根因。

立即解除封鎖

# 方法一:mysqladmin(需有效連線權限)
mysqladmin -h blocked_host -u root -p flush-hosts

# 方法二:SQL 語句(需 SUPER 權限)
FLUSH HOSTS;

調整閾值

臨時生效:

SET GLOBAL max_connect_errors = 10000;

永久生效(配置檔):

[mysqld]
max_connect_errors = 10000
⚠️ 警告: 單純調大閾值無法解決網路不穩、應用連線洩漏、防火牆攔截等根本問題,反而可能掩蓋故障。

根因排查清單

  1. 網路層:ping/tcpping 測試延遲丟包;檢查防火牆/安全組是否阻斷長連線。
  2. 應用層:連線池配置(maxIdle/maxWait/validationQuery),避免空閒連線被中斷後重用失敗。
  3. 資料庫層:wait_timeout/interactive_timeout 設定過短導致 Server 主動斷開;錯誤日誌查看 Aborted_connects 計數器。
  4. DNS 反向解析:skip_name_resolve=ON 關閉 DNS 解析,避免解析超時計入錯誤。

監控與告警

-- 即時查看主機錯誤計數
SHOW GLOBAL STATUS LIKE 'Aborted_connects';
-- 查看當前封鎖狀態(需 performance_schema)
SELECT * FROM performance_schema.host_cache WHERE SUM_CONNECT_ERRORS > 0;

建議將 Aborted_connects 納入監控,連續增長觸發告警。

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