KennyQi PHP Blog

Linux、PHP、Perl、Ajax、MySQLでのWeb開発やWordPressの設定メモと息抜きブログ

  • 3月182010

    MySQLでToo many connectionエラー 原因はunauthenticated user

    Published on 2010/03/18 09:58 14,321
    カテゴリ: Linux, MySQL; タグ:

    サーバが稼動して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ユーザのみプロセスが残っているのが確認できた。
    とりあえず、これで解決したもよう。
    様子を見てみる。
    参照先のかたがた。感謝です。

    このページはどうでしたか?
    よくないよい (No Ratings Yet)
    No Comments
  • 初めて当ブログに訪れた方や何度か当ブログにお越し頂いている皆様。
    もしブログの内容を気に入って頂けましたらRSSリーダーの登録よろしくお願いします。

コメント


ブログランキング

にほんブログ村 IT技術ブログへ 人気ブログランキングへ

最新記事

カテゴリー

人気記事