-
3月182010
MySQLでToo many connectionエラー 原因はunauthenticated user
No Commentsサーバが稼動して1ヶ月くらい経ったころ、
急にMySQLに接続できなくなってあせりました。
調べると、MySQLへの接続数がサーバ設定値に到達しており、接続ができない状態になっていました。
なんで接続が増えたのか原因を調べると
「MySQLがアクセスしてくるクライアントのIPアドレスのDNSの逆引きをやっているらしく、逆引きができないときに「unauthenticated user」が溢れるという事象が起こる」とのこと。(「unauthenticated user」が溢れた。 – お仕事日記。)
自サバでこの状況が起こっているか確認してみる。
現状、MySQLは最大接続数に達しているため、アクセスできないので
とりあえず、
接続要求するスクリプトをいったん止めて、
最大接続数を一時的に増やし、MySQL再起動。# vi /etc/my.cnf [mysqld] max_connections=200 # /etc/init.d/mysqld restart
MySQLを再起動してもまったく反応がなかったので、
DBをバックアップして
killコマンドで強制終了。
(強制終了すると、DBが壊れることもあるらしい。。自己責任で)# kill -9 ID
IDは”/etc/init.d/mysqld status”で確認
強制終了したのに、再起動されてるもよう。。
とりあえず、MySQLにはアクセスできるようになったので
ま、いいかと、次の作業へ# mysql -u root -p
MySQLに接続し、さきほど止めたスクリプトをいったん有効にしてみる。
接続したMySQL上で> SHOW PROCESSLIST;
で接続してるプロセスを確認。
すると、”unauthenticated user”ユーザのアクセスが多数確認できた。
とりあえず、スクリプトを再度無効にして、
MySQL再起動。
で、このアクセスをさせないための対処だが、
MySQL:show processlistでunauthenticated userによる負荷:skip-name-resolve
に載っていた。# vi /etc/my.cnf [mysqld] skip-name-resolve
を追加してMySQLを再起動。これでMySQLでのDNS逆引きを無効にできるとか。
sshでMySQLに接続したまま、
MySQL接続をするスクリプトを有効にして、
SHOW PROCESSLISTを打ってどんなアクセスがあるか確認してみる。
おおー、さきほどのようなプロセスはなくなって
いま接続してるrootユーザのみプロセスが残っているのが確認できた。
とりあえず、これで解決したもよう。
様子を見てみる。
参照先のかたがた。感謝です。





