MySQL錯誤 Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'問題解決


錯誤:Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

image

簡述mysql連接流程:

  1. 根據mysql連接協議,發起握手,在網絡層面里

  2. mysql服務器在內存上常見客戶端連接的數據結構

  3. 連接認證,檢查用戶名,密碼正確不

  4. 監聽端口,等待命令

原因:

同一個ip在短時間內產生太多(超過mysql數據庫max_connection_errors的最大值)中斷的數據庫連接而導致的阻塞;

max_connect_errors是一個MySQL中與安全有關的計數器值,它負責阻止過多嘗試失敗的客戶端以防止暴力破解密碼的情況。

max_connect_errors的值與性能並無太大關系,默認是10。意味着如果某一客戶端嘗試連接此MySQL服務器,但是失敗(如密碼錯誤等等)10次 ,則MySQL會無條件強制阻止此客戶端連接。

如果希望重置此計數器的值,則必須重啟MySQL服務器或者執行mysql> flush hosts; 命令。當這一客戶端成功連接一次MySQL服務器后,針對此客戶端的max_connect_errors會清零。

如果max_connect_errors設置過小,則網頁可能提示無法連接數據庫服務器。

解決方法:

1. 最簡單快捷(治標不治本):

# 登錄mysql
mysql -u root -p

# 執行
flush hosts;

或者
在查找到的安裝bin目錄下使用命令修改:mysqladmin -u xxx -p flush-hosts

刷新緩存,發現錯誤已經解決,但是當max_connection_errors值再次變大后,需重新操作此方法。
備注:配置有master/slave主從數據庫的要把主庫和從庫都修改一遍的;

使用mysqladmin flush-hosts 命令清理一下hosts文件(不知道mysqladmin在哪個目錄下可以使用命令查找:whereis mysqladmin);

2. 提高允許的max_connection_errors數量

進入Mysql數據庫查看max_connection_errors: show variables like '%max_connection_errors%';

show variables like '%max_connection_errors%';

修改max_connection_errors的數量為1000: set global max_connect_errors = 1000;

set global max_connect_errors = 1000;

查看是否修改成功:show variables like '%max_connection_errors%';

show variables like '%max_connection_errors%';

3. 重啟mysqld

也可以在重啟之前,在配置文件中將該參數調大。

# vi /etc/my.cnf
max_connect_errors = 100

上述都不是從根本上解決問題,需要真實找到受限制訪問的地址是什么,是否是程序錯誤或者惡意訪問


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM