1. 程式人生 > >mysql出現unblock with 'mysqladmin flush-hosts'

mysql出現unblock with 'mysqladmin flush-hosts'

如果 有關 str trying 清零 char 修改 sql數據庫 any

朋友發來消息,說一個系統應用登錄的時候提示連接超時,讓幫忙處理一下。
問他應用和數據庫是否都正常,回復說數據庫好像沒有問題,但是應用日誌報無法連接數據庫。

數據庫版本是:5.5.53


讓他telnet數據庫是否是通的,回復說不通,並發來了信息提示:

# telnet  8.8.9.9 3306
Trying 8.8.9.9...
Connected to 8.8.9.9.
Escape character is ‘^]‘.
gHost ‘kapp‘ is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts‘Connection closed by foreign host.

可以看出,產生的原因是:

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

讓他查看以下參數並發來結果:

> show variables like ‘max_connect_errors‘;
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_connect_errors | 2     |
+--------------------+-------+

  

max_connect_errors是一個MySQL中與安全有關的計數器值,它負責阻止過多嘗試失敗的客戶端以防止暴力破解密碼的情況。
max_connect_errors的值與性能並無太大關系,默認是10,不知道為何改為了2。意味著如果某一客戶端嘗試連接此MySQL服務器,但是失敗(如密碼錯誤等等)2次 ,則MySQL會無條件強制阻止此客戶端連接。
如果希望重置此計數器的值,則必須重啟MySQL服務器或者執行mysql> flush hosts; 命令。當這一客戶端成功連接一次MySQL服務器後,針對此客戶端的max_connect_errors會清零。
如果max_connect_errors設置過小,則網頁可能提示無法連接數據庫服務器。

以下是解決方案,再貼一下吧。

解決方法1:修改max_connection_errors的值
(1)進入Mysql數據庫查看max_connection_errors:
> show variables like ‘%max_connect_errors%‘;
(2)修改max_connection_errors的值:
> set global max_connect_errors = 100;
(3)查看是否修改成功
> show variables like ‘%max_connect_errors%‘;

解決方法2:使用mysqladmin flush-hosts 命令清理一下hosts文件
(1)在查找到的目錄下使用命令修改:mysqladmin -u xxx -p flush-hosts
備註: 配置有master/slave主從數據庫的要把主庫和從庫都修改一遍的
或者
> flush hosts;


解決方法3:重啟mysqld
也可以在重啟之前,在配置文件中將該參數調大。
# vi /etc/my.cnf
max_connect_errors = 100

mysql出現unblock with 'mysqladmin flush-hosts'