mysql:14585
From: "junya_arai" <"junya_arai" <j.arai@xxxxxxxxxx>>
Date: Wed, 28 May 2008 11:37:07 +0900
Subject: [mysql 14585] Re: Can't connect to local MySQL server through socket (146)のエラーについて
お世話になっております。荒井です。 助言ありがとうございます。 以下、調査結果について報告をします。 > mysqld が使用するファイルディスクリプタ数は十分でしょうか? > ソケットを開く場合、mysqld もファイルディスクリプタをひとつ > 消費します。ファイルディスクリプタ数が足りないと接続を > 確立することが出来ません。 show variablesでopen-files-limitを調べた所、ファイル記述子の数は500でした。 また、OSのソフトリミットについて調べた所256に設定されており、十分な数だと思っています。 > myslqd のエラーログには何も出力されてないでしょうか? > mysqld が意図的にコネクションをクローズした場合は > 何らかのエラーログが記録されているかも知れません。 mysqldのエラーログを調べましたが、接続拒否された時間帯にログは記録されていませんでした。 > 上記以外の場合は DTrace で追跡するしかないですね。 > とりあえず DTrace Toolkit の opensnooop でも使ってみましょう。 アドバイスありがとうございます。 当方DTraceの使用が初めてのため、現在DTraceについて調べている状況です。 DTraceで追跡をして、結果が出ましたら報告いたします。 > -- > Mikiya Okuno > Support Engineer, MySQL KK > > On 2008/05/23, at 19:11, junya_arai wrote: >> お世話になっております。荒井です。 >> ご指摘の通り、エラー番号146は、connectシステムコールが >> 接続の拒否によって失敗した場合に発生すると認識しております。 >> >>> 146 ECONNREFUSED >>> * 接続が拒否されました。 >>> * 相手側マシンにより拒否されたので、接続を確立できませんでした。 >>> 通常この状態は、リモートホスト上でアクティブになっていないサービスに接続しようとした場合に発生します。 >> >> 146 ECONNREFUSEDが発生した時間に、別の常駐プロセスは接続できているため、mysqlは正常に動作していると >> 考えられます。 >> >> また、ソケット接続のlistenの待ちキューのback_logが溢れた場合に >> 146 ECONNREFUSEDが発生すると思いますが、 >> mysqlのback_logの設定値を調べた結果、50に設定されており、 >> サーバ側でlistenしているキューの数が足りずに接続拒否になったとは、考えづらく思います。 >> >> 以上調査した2ケースからは、接続拒否となった原因にたどり着けない状況です。 >> そのため、他にエラー番号146が発生するケースについて、手がかりを探しています。 >> >> >> ご存知の方、手がかりをお持ちの方がおりましたら、ご教授頂きたく思います。 >> よろしくお願いします。 >> >>> 池田です。 >>> >>> 追記です。 >>> >>> すみません、タイトルにエラーメッセージ書いてありましたね。 >>> 手元にSolarisマシンがないので146番が以下であると気づくのが遅れました。 >>> >>> 146 ECONNREFUSED >>> * 接続が拒否されました。 >>> * 相手側マシンにより拒否されたので、接続を確立できませんでした。 >>> 通常この状態は、リモートホスト上でアクティブになっていないサービスに接続しようとした場合に発生します。 >>> >>> 2008/05/21 18:48 Tetsuro IKEDA <ikdttr@xxxxxxxxxx>: >>>> 池田です。 >>>> >>>> エラー番号146とのことですが、番号だけでなくメッセージも教えてください。 >>>> 例えばこんな感じ↓↓で出力されたメッセージそのものをコピペしてもらえれば。 >>>> エラーメッセージは割とソース解析の手がかりになります。 >>>> >>>> ERROR 2002 (HY000): Can't connect to local MySQL server through socket >>>> '/tmp/mysql.sock' (2) >>>> >>>> 以下のようにconnectシステムコールが失敗しているとのことですが、根拠は何ですか? >>>> (単なる推測でしょうか?あるいは他に何か情報をお持ちですか?) >>>> >>>>> 疑問点: >>>>> おそらく、mysql_real_connectライブラリーの中でのconnectシステムコールが >>>>> >>>>> 失敗していると思いますが、なぜ146になるのかわかりません。 >>>> >>>> mysqldがlistenするUnixソケット用キューの数はback_logで指定した値 >>>> (デフォルト値=50)だと思います。 >>>> >>>> sql/mysqld.cc: if (listen(unix_sock,(int) back_log) < 0) >>>> >>>>> 1、mysqldでlistenしているUnix ソケット用キューの数は幾つでしょうか? >>>>> mysqlのソース調査して見たのですが、よく分かりません。 >>>> >>>> 勘違いだったらすみません。 >>>> >>>> -- >>>> Tritonn http://qwik.jp/tritonn/ >>>> hatena http://d.hatena.ne.jp/mir/ >>>> >>> >>> >>> >>> -- >>> Tritonn http://qwik.jp/tritonn/ >>> hatena http://d.hatena.ne.jp/mir/ >> >> > > >
14566 2008-05-21 20:37 ["junya_arai" <j.arai] Can't connect to local MySQL server through socket (146)のエラーについて 14567 2008-05-22 10:48 ┗["Tetsuro IKEDA" <ikd] 14568 2008-05-22 11:09 ┗["Tetsuro IKEDA" <ikd] 14574 2008-05-23 19:11 ┗["junya_arai" <j.arai] 14575 2008-05-23 19:49 ┗[Mikiya Okuno <okuno@] -> 14585 2008-05-28 11:37 ┗["junya_arai" <j.arai] 14586 2008-05-28 12:04 ┗[Mikiya Okuno <okuno@]