このページでは、MongoDB Rust ドライバーを使用して MongoDB の配置に接続する際に発生する可能性のある問題に対する潜在的な解決策を提供します。
注意
このページでは、接続の問題のみを説明します。 MongoDB またはドライバーに関するその他の問題が発生した場合は、次のリソースにアクセスしてください。
操作中にドライバーが発生するさまざまなエラーの種類を処理する方法に関する推奨事項については、「 操作エラー処理」を参照してください。
バグの報告、ドライバーへの貢献、およびリソースの検索に関する情報は「問題とヘルプ」のページを参照してください
質問、ディスカッション、または一般的な技術サポートについては、 MongoDB Stack Overflowタグ またはMongoDB Reddit Community を使用してください
Rust ドライバーに関するよくある質問とそれに対応する回答については、「よくある質問(FAQ) 」セクションを参照してください
サーバー接続エラー
サーバーに接続しようとしたときに問題が発生した場合、 Rustドライバーはエラー メッセージを返します。このエラーが次のメッセージのような場合、ドライバーはMongoDBデプロイに接続できないことを示します。
Error: Error { kind: ServerSelection { message: "Server selection timeout: No available servers. Topology: { Type: Unknown, Servers: [ { Address: 127.0.0.1:27017, Type: Unknown, Error: Kind: I/O error: Connection refused (os error 61), labels: {} } ] }" }, labels: {}, wire_version: None, source: None }
次のセクションでは、問題を解決するのに役立つ可能性のある方法について説明します。
接続stringの確認
接続stringのホスト名とポート番号が両方とも正確であることを確認してください。 サンプル エラー メッセージでは、ホスト名は 127.0.0.1で、ポートは27017です。 MongoDB Server のインスタンスのデフォルトのポート値は27017ですが、MongoDB を別のポートでリッスンするように構成できます。
レプリカセットに接続するときは、すべてのレプリカセット ホストを 接続stringに含めます。 接続string内の各ホストをカンマで区切ります。 これにより、ホストの 1 つが到達できない場合でも、ドライバは接続を確立できます。
レプリカセットで複数のホストを指定する方法の詳細については、 接続ガイド の「レプリカセットへの接続」セクションを参照してください。
ファイアウォールを設定する
MongoDB 配置がファイアウォールの背後でホストされている場合は、MongoDB がリッスンするポートがファイアウォールで開いていることを確認します。 配置がデフォルトのネットワークポートでリッスンする場合は、ファイアウォールでポート27017が開いていることを確認します。 配置が別のポートでリッスンする場合は、ファイアウォールでポートが開いていることを確認します。
警告
MongoDB 配置がリッスンするポートであることが確実な場合を除き、ファイアウォール ポートを開かないでください。
接続数の確認
各Clientインスタンスは、接続プール内で同時にオープンする接続の最大数をサポートします。 この値は構成パラメータmaxPoolSizeによって定義され、デフォルトでは100に設定されます。 オープンな接続の数がmaxPoolSizeと等しい場合、サーバーは接続が利用可能になるまで待機します。 この待機時間がmaxIdleTimeMSの値を超えると、ドライバーはエラーで応答します。
ドライバーで接続プールがどのように機能するかについて詳しくは、「 Rust ドライバーで接続プールがどのように機能するか 」を参照してください。 FAQ ページを参照してください。
認証エラー
認可が正しく構成されていない場合、Rust ドライバーは MongoDB 配置に接続できない可能性があります。 このような場合、ドライバーは次のメッセージのようなエラー メッセージを表示します。
Error: Error { kind: Authentication { message: "SCRAM failure: bad auth : authentication failed" }, labels: {}, wire_version: None, source: Some(Error { kind: Command(CommandError { code: 8000, code_name: "AtlasError", message: "bad auth : authentication failed", topology_version: None }), labels: {}, wire_version: None, source: None }) }
次のセクションでは、問題を解決するのに役立つ可能性のある方法について説明します。
認証情報の形式確認
認証の問題の最も一般的な原因の 1 つは、 MongoDB接続string内の無効な認証情報の形式です。
Tip
接続文字列の詳細については、「接続stringの作成」ガイドを参照してください。
接続stringにユーザー名とパスワードが含まれている場合は、それらが正しく形式されていることを確認してください。
認証メカニズムを検証する
資格情報と認証メカニズムが正しいことを確認します。 接続stringのオプションで認証資格情報を指定できます。
あるいは、 Credential構造体で認証情報を指定することもできます。
認証の詳細については、認証メカニズムのガイドを参照してください。
認証データベースでユーザーがであることを確認
ユーザー名とパスワードベースの認証方法を使用する場合、認証データベースにユーザー名を定義する必要があります。
デフォルトの認証データベースはadminデータベースです。 認証に別のデータベースを使用するには、 接続stringで authSource オプションを指定します。
次の例えでは、認証データベースとしてusersデータベースを使用するように MongoDB に指示します。
let uri = "mongodb://<username>:<password>@<hostname>:<port>/?authSource=users"; let client = Client::with_uri_str(uri).await?;
DNS 解決エラー
Rust ドライバーが DNS 接続を解決できない可能性があります。 その場合、次のメッセージのようなエラー メッセージが表示される場合があります。
Error: Error { kind: DnsResolve { message: "sample message. type: SRV class: IN" }, labels: {}, wire_version: None, source: None }
ドライバーがこのエラーを報告する場合は、問題を解決するために次のセクションの方法を試してください。
データベース配置の可用性を確認
MongoDB Atlas に接続していて、ドライバーが Atlas データベース配置の DNS ホストを検出できない場合は、データベース配置が一時停止または削除される可能性があります。
データベース配置が Atlas に存在することを確認します。 クラスターが一時停止されている場合は、Atlas UI またはAtlas コマンドラインインターフェイスでクラスターを再開できます。
クラスターを再開する方法については、Atlas ドキュメントの「 1 つのクラスターの再開」を参照してください。
ネットワーク アドレスの確認
接続stringのネットワークアドレスまたはホスト名が正確であることを確認してください。
配置がMongoDB Atlasでホストされている場合は、 「 クラスターへの接続 」チュートリアルに従って、 Atlas接続stringを見つけることができます。