Docs Menu
Docs Home
/ / /
Go

接続のトラブルシューティング

項目一覧

  • 接続エラー
  • 接続string確認
  • ファイアウォールの設定
  • 認証エラー
  • 接続string確認
  • 認証メカニズムを検証する
  • 認証データベースでユーザーがであることを確認
  • メッセージの送信エラー
  • 接続string確認
  • 認証メカニズムを検証する
  • 認証データベースでユーザーがであることを確認
  • ファイアウォールの設定
  • 接続数の確認
  • タイムアウト エラー
  • タイムアウト オプションの設定
  • 接続数の確認

このページでは、MongoDB Go ドライバーを使用して MongoDB の配置に接続する際に発生する可能性のある問題に対する潜在的な解決策を提供します。

注意

このページでは、接続の問題のみを説明します。 MongoDB またはドライバーに関するその他の問題が発生した場合は、次のリソースにアクセスしてください。

  • Go ドライバーのよくある質問(FAQ)

  • 問題とヘルプ」ページには、バグの報告、ドライバーへの貢献、および追加リソースの検索に関する情報が記載されています

  • MongoDB Community フォーラム では、質問、ディスカッション、または一般的なテクニカルサポートが受けられます。

次のエラー メッセージは、ドライバーが指定されたホスト名またはポートでサーバーに接続できないことを示す一般的なメッセージです。

Error: couldn't connect to server 127.0.0.1:27017

次のセクションでは、問題を解決するのに役立つ可能性のある方法について説明します。

接続stringのホスト名とポート番号が両方とも正確であることを確認してください。 サンプル エラー メッセージでは、ホスト名は 127.0.0.1で、ポートは27017です。 MongoDB インスタンスのデフォルトのポート値は27017ですが、MongoDB を別のポートで通信するように構成できます。

MongoDB 配置でデフォルトのポートを使用していることを前提とすると、ファイアウォールでポート27017が開いていることを確認します。 配置で別のポートを使用する場合は、正しいポートがファイアウォールで開いていることを確認してください。

警告

MongoDB インスタンスで使用されるポートであることが確実な場合を除き、ファイアウォールでポートを開かないでください。

認証が正しく構成されていない場合、Go ドライバーは MongoDB インスタンスに接続できないことがあります。 このような場合、ドライバーは次のいずれかのメッセージのようなエラー メッセージを表示します。

Command failed with error 18 (AuthenticationFailed): 'Authentication
failed.' on server localhost:27017.
connection() error occurred during connection handshake: auth error:
sasl conversation error: unable to authenticate using mechanism
"SCRAM-SHA-256": (AuthenticationFailed) Authentication failed.

次のセクションでは、問題を解決するのに役立つ可能性のある方法について説明します。

無効な接続stringは、 MongoDBに接続しようとする際の認証の問題の最も一般的な原因です。

Tip

接続文字列の詳細については、接続ガイドの「接続 URI 」を参照してください。

接続stringにユーザー名とパスワードが含まれている場合は、それらが正しい形式であることを確認してください。

注意

ユーザー名またはパスワードに次の文字のいずれかが含まれている場合は、 パーセント エンコードされ ている必要があります。

: / ? # [ ] @

レプリカセットに接続するときは、レプリカセット内のすべてのホストを 接続stringに含める必要があります。 接続string内の各ホストをカンマで区切ります。 これにより、ホストの 1 つが到達できない場合でも、ドライバは接続を確立できます。

資格情報と認証メカニズムが正しいことを確認します。 認証資格情報は環境変数に保存することも、 SetAuth()メソッドに渡すこともできます。

認証の詳細については、認証メカニズムのガイドを参照してください。

ユーザー名とパスワードを使用して接続を正常に認証するには、認証データベースにユーザー名を定義する必要があります。 デフォルトの認証データベースはadminデータベースです。 認証に別のデータベースを使用するには、 接続stringで authSource を指定します。 次の例では、認証データベースとしてusersを使用するようにドライバーに指示しています。

uri := "mongodb://<username>:<password>@<hostname>:<port>/?authSource=users"
client := mongo.Connect(uri)

リクエストを行った後にドライバーがコマンドの送信に失敗すると、多くの場合次の一般的なエラーメッセージが表示されます。

com.mongodb.MongoSocketWriteException: Exception sending message

次のセクションでは、問題を解決するのに役立つ可能性のある方法について説明します。

アプリ内の接続stringが正確であることを確認します。 接続stringの検証の詳細については、「接続エラー」および「認証エラー 」を参照してください。

正しい認証メカニズムと認証情報を使用していることを確認してください。 認証エラーの詳細については、「認証エラー 」を参照してください。

ユーザーが正しい認証データベースに所属していることを確認します。 認証データベースの詳細については、「認証エラー 」を参照してください。

ファイアウォールは MongoDB インスタンスと通信するためにオープンなポートが必要です。 ファイアウォールの設定の詳細については、「接続エラー 」を参照してください。

MongoClientインスタンスは、接続プール内で同時にオープンする接続の最大数をサポートします。 この値は構成パラメータmaxPoolSizeによって定義され、デフォルトでは100に設定されます。 すでに開いている接続の数がmaxPoolSizeに等しい場合、サーバーは接続が利用可能になるまで待機します。 この待機時間がmaxIdleTimeMSの値を超えると、ドライバーはエラーで応答します。 接続プーリングの仕組みの詳細については、「 Go ドライバーでは接続プーリングはどのように機能しますか 」を参照してください。 FAQ に記載されています。

ドライバーを介してサーバーにリクエストを送信すると、リクエストがタイムアウトする場合があります。 その場合、次のメッセージのようなエラー メッセージが表示される場合があります。

timed out while checking out a connection from connection pool: context canceled

このエラーが発生した場合は、問題を解決するために次の方法をお試しください。

Clientは、1 つの操作の実行にかかる時間を制御する単一のTimeoutオプションをサポートしています。 この値は、SetTimeout() メソッドを使用するか、 接続stringで timeoutMS オプションを指定して設定できます。

次の例では、 接続stringオプションを使用して、単一のタイムアウト値を 5 秒に設定します。

uri := "mongodb://<username>:<password>@<hostname>:27017/?timeoutMS=5000"
client := mongo.Connect(uri)

サーバーへの接続数がmaxPoolSizeを超える可能性があります。 接続数の確認の詳細については、「メッセージの送信エラー 」を参照してください。

戻る

FAQ