MySQL接続エラー [Error: ER_HOST_IS_BLOCKED: Host '〜' is blocked because of many connection errors]

f:id:daihase:20190809115406j:plain

こんばんは、daihaseです。

今日はMySQLに関する設定について。 ある日モニタリングサービス経由で「おたくのDBが止まったよ」的なエラー報告が。

ログを見てみると

 

[Error: ER_HOST_IS_BLOCKED: Host 'xxx.xxx.xxx.xxx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts']

 

MySQLはシステム変数でmax_connect_errorsというものがあるのですが、設定されている数値を超える回数の接続の失敗があった場合、それを不正と捉えロックがかかります。

※これがMySQL5.7だと初期設定で100になっています。

これ自体厳密にはブルートフォースアタックや不正なクラックを防ぐセキュリティ効果があるかというとそうでもなく、またサーバースペックが低いとハンドシェイクエラーが発生しそれもカウントされるため、初期で設定されているしきい値では色々心もとないです。

エラーログにもあるようにmysqladmin flush-hostsしてやれば問題なく使えるのですが、せっかくなのでしきい値も変更してみましょう。

まずはMySQLにログインし、以下を実行。

$ mysql -u root -p
...
mysql> FLUSH HOSTS;

 

そうしたら以下を叩いてしきい値を変えます。

mysql> SET GLOBAL max_connect_errors=10000;
Query OK, 0 rows affected (0.00 sec)

今日はここまで。 それでは良い開発ライフを〜