tetsunosukeのnotebook

tetsunosukeのメモです

[mysql] max_connetion_errorsに達してしまった。これは連続回数らしい。

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

とか出やがったので、これを調べてました。

問題は一つのホストから、多くのコネクションエラーが発生したから、ということで、MySQL側でそのホストを不正とみなしてブロックするとのこと。

で、その多くのコネクションとは、設定値"max_connect_errors"とのことで、そのデフォルト値10回に達してしまったという状態を指すらしい。

はて、問題はこの回数だが、エラー回数が蓄積された場合なのか?それとも、連続した回数なのか?そのあたりの記述がマニュアルで見つからない。というわけで仕方なく、調査。

エラーメッセージの定義ファイルからスタートして、最終的にはsql_connect.ccを見ていたらこんな感じの記述を発見した。

677       if (connect_errors > max_connect_errors) ← 回数が超過していたら
678       {        ↑エラー出力して終了
679         my_error(ER_HOST_IS_BLOCKED, MYF(0), thd->main_security_ctx.host_or_ip);
680         return 1;
681       }     ↓正常時にconnect_errors > 0なら回数リセット
765   if (connect_errors)
766     reset_host_errors(&thd->remote.sin_addr); 

(あまりにも抜粋してるけど、結局はここにたどりついた)他にもmysqld.ccなどをいったりきたりして。

実験結果としては連続であったが、かなり確度の高い情報を得ることができて良かった。