接続のトラブルシューティング
項目一覧
このページでは、MongoDB Go ドライバーを使用して MongoDB の配置に接続する際に発生する可能性のある問題に対する潜在的な解決策を提供します。
注意
このページでは、接続の問題のみを説明します。 MongoDB またはドライバーに関するその他の問題が発生した場合は、次のリソースにアクセスしてください。
Go ドライバーのよくある質問(FAQ)
「問題とヘルプ」ページには、バグの報告、ドライバーへの貢献、および追加リソースの検索に関する情報が記載されています
MongoDB Community フォーラム では、質問、ディスカッション、または一般的なテクニカルサポートが受けられます。
接続エラー
次のエラー メッセージは、ドライバーが指定されたホスト名またはポートでサーバーに接続できないことを示す一般的なメッセージです。
Error: couldn't connect to server 127.0.0.1:27017
次のセクションでは、問題を解決するのに役立つ可能性のある方法について説明します。
接続string確認
接続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確認
無効な接続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が正確であることを確認します。 接続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
を超える可能性があります。 接続数の確認の詳細については、「メッセージの送信エラー 」を参照してください。