skip-name-resolve重要

MySQLを使っていて、サーバーの負荷は高くないのに接続できないクライアントが発生、状況を見ようとshow processlistするとunauthenticated userがたくさんいることがわかった。そのコネクションがあふれてmax connectionsに到達、接続できないクライアントがあるらしかった。

いろいろ調べてみるとクライアントのIPアドレスDNS逆引きをしていて、その処理が追いつかなくなるとそうなるらしく、解決方法としては2つあった。

  • /etc/hostsでクライアントの名前解決をできるようにする
  • /etc/my.cnfにskip-name-resolveを設定してMySQLをrestart

/etc/hostsでの対策はお手軽だがメンテナンスが面倒な感じ。

skip-name-resolveのオプション付けていなかったっけ…と調べたら付いていないことが発覚。/etc/my.cnfに設定を追記してMySQLをrestartしたらきれいにunauthenticated userがいなくなった。ただしこれを設定するとMySQLのユーザーでホスト名ベースで管理されているユーザーがログインできなくなるので注意(IPアドレスで管理されていれば問題ない)。localhostで管理されているユーザーも127.0.0.1で管理すべき。

ただ1つ気になるのは、unauthenticated userがあふれ出すタイミングがわからないということ。接続数が多くなるとあふれるのだろうけど、見ていると急にあふれているように見えた。

参考:

追記:
http://d.hatena.ne.jp/studio-m/20100924/1285303021id:studio-m がそれぞれの設定におけるベンチマークを計測してくれました。そちらもあわせてご覧くださいませ。