5

次のエラーメッセージが表示されます。

SQLSTATE [HY000] [2003]「192.168.50.45」でMySQLサーバーに接続できません(4)

これをどのように解析しますか(HY000、2003、(4)があります。

4

6 に答える 6

10

HY000は非常に一般的なODBCレベルのエラーコードであり、2003はMySQL固有のエラーコードであり、最初のサーバー接続が失敗したことを意味します。4は、MySQLドライバーが実行しようとした失敗したOSレベルの呼び出しからのエラーコードです。(たとえば、Linuxでは、接続が拒否されたときに「(111)」と表示さconnect()れます。これは、値が111のECONNREFUSEDエラーコードで呼び出しが失敗したためです。)

于 2012-06-27T16:47:18.833 に答える
4

MySQLに付属のperrorツールを使用する:

shell> perror 4
OS error code   4:  Interrupted system call

誤ったエラーが報告されるバグである可能性があります。この場合、単純な接続タイムアウト(errno 111)である可能性があります。

于 2012-06-27T21:23:58.273 に答える
3

FWIWは、さまざまな方法でこれを調査するために約2〜3か月を費やしましたが、(少なくとも私たちにとっては)ネットワークが接続するにはデータが多すぎる場合に(4)エラーが発生するという結論に達しました。かなりの時間で完了します。私たちの調査によると、(4)はハンドシェイクプロセスの途中で発生します。これは、UNIX環境で「netem」を使用してネットワークの輻輳を偽造することで確認できます。

手っ取り早い解決策は、接続タイムアウトパラメータを上げることです。これにより、(4)エラーは非表示になりますが、問題の解決策にはならない場合があります。本当の解決策は、その時点でDB側で何が起こっているかを確認することです。これが発生したときに大量のデータを処理している場合は、これを小さなチャンクに分割できるかどうかを確認するか、その余裕がある場合は処理を別のサーバーに渡すこともできます。

于 2013-06-27T16:29:11.503 に答える
1

私はたまたまこの問題に直面しました。最終的にうまくいったconnect_timeoutを増やします。

于 2013-08-16T16:07:23.993 に答える
0

私は同じ問題に苦しんでいました。

DNSホスト名ルックアップを無効にすると、問題が解決しました。

[mysqld]......スキップ-名前-解決

有効にするには、MySQLを再起動することを忘れないでください。

于 2013-10-17T04:07:51.733 に答える
0

@cdhowie他の状況では正しいかもしれませんが、その特定のエラーでは、(4)はハンドシェイクの失敗によって引き起こされたmysqlクライアントライブラリエラーです。実際にソースコードに表示されます。通常の理由は、データが多すぎて内部タイムアウトが発生することです。接続用に「スペース」を作成すると、通常、タイムアウトの増加や帯域幅の増加など、問題を隠すことなく接続がソートされます。

于 2014-07-19T16:34:42.290 に答える