[前][次][番号順一覧][スレッド一覧]

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@]