このページでは、 PHPライブラリを使用してMongoDBデプロイに接続する際に発生する可能性のある問題に対する潜在的な解決策を提供します。
注意
このページでは、接続の問題のみを説明します。MongoDBまたはPHPライブラリの使用中にその他の問題が発生した場合は、次のリソースにアクセスしてください。
一般的な質問のサポートを見つけるには、 MongoDB Stack Overflowタグ またはMongoDB Reddit コミュニティ を参照してください。
サーバー接続エラー
サーバーに接続しようとしたときに問題が発生した場合、 PHPライブラリはエラー メッセージを返します。このエラーが次のメッセージのような場合、ライブラリはMongoDBデプロイに接続できないことを示します。
No suitable servers found (`serverSelectionTryOnce` set): [connection refused calling hello on 'localhost:27017']
次のセクションでは、問題を解決するのに役立つ可能性のある方法について説明します。
接続 URI の確認
接続 URI のホスト名とポート番号が両方とも正確であることを確認してください。サンプルエラー メッセージでは、ホスト名は 127.0.0.1
で、ポートは 27017
です。MongoDB Server配置のデフォルトのポート値は 27017
ですが、 MongoDB を別のポートでリッスンするように構成できます。
レプリカセットに接続するときは、すべてのレプリカセットホストを接続 URI に含めます。接続文字列内の各ホストをカンマで区切ります。 これにより、ホストの 1 つが到達できない場合でも、ライブラリは接続を確立できます。
複数のレプリカセットホストを指定する方法については、 接続ターゲットの選択ガイドの「レプリカセット」セクションを参照してください。
ファイアウォールを設定する
MongoDB 配置がファイアウォールの背後でホストされている場合は、MongoDB がリッスンするポートがファイアウォールで開いていることを確認します。 配置がデフォルトのネットワークポートでリッスンする場合は、ファイアウォールでポート27017
が開いていることを確認します。 配置が別のポートでリッスンする場合は、ファイアウォールでポートが開いていることを確認します。
警告
MongoDB 配置がリッスンするポートであることが確実な場合を除き、ファイアウォール ポートを開かないでください。
認証エラー
認可が正しく構成されていない場合、 PHPライブラリはMongoDBデプロイに接続できない可能性があります。このような場合、ライブラリは次のメッセージのようなエラー メッセージを表示します。
Authentication failed.
次のセクションでは、問題を解決するのに役立つ可能性のある方法について説明します。
認証情報の形式確認
認証の問題の最も一般的な原因の 1 つは、 MongoDB接続 URI の認証情報の形式が無効であることです。
Tip
接続 URI の使用の詳細については、 MongoDBクライアントの作成ガイドの「接続 URI」を参照してください。
接続 URI にユーザー名とパスワードが含まれている場合は、それらが正しく設定されていることを確認します。
注意
ユーザー名またはパスワードに次の文字が表示される場合は、パーセント エンコードする必要があります。
: / ? # [ ] @
接続 URI で、パーセント エンコードされたユーザー名とパスワードを使用します。
認証メカニズムを検証する
資格情報と認証メカニズムが正しいことを確認します。接続 URI のオプションで認証情報を指定できます。
$uriOptions
パラメータを使用して認証メカニズムを指定する場合は、'authMechanism'
オプションが正しいメカニズムに設定されていることを確認してください。次のコードは、オプション パラメータで SCRAM-SHA-1
認証メカニズムを指定する方法を示しています。
$uriOptions = [ 'username' => '<username>', 'password' => '<password>', 'authSource' => '<authentication database>', 'authMechanism' => 'SCRAM-SHA-1', ]; $client = new MongoDB\Client( 'mongodb://<hostname>:<port>', $uriOptions, );
認証メカニズムの指定の詳細については、認証メカニズムセクションを参照してください。
認証データベースでユーザーがであることを確認
ユーザー名とパスワードベースの認証方法を使用する場合、認証データベースにユーザー名を定義する必要があります。
デフォルトの認証データベースは admin
データベースです。認証に別のデータベースを使用するには、接続 URI で authSource
オプションを指定します。
次の例えでは、認証データベースとしてusers
データベースを使用するように MongoDB に指示します。
$uri = 'mongodb://<username>:<password>@<hostname>:<port>/?authSource=users'; $client = new MongoDB\Client($uri);
DNS 解決エラー
PHPライブラリが DNS 接続を解決できない可能性があります。その場合、次のメッセージのようなエラー メッセージが表示される場合があります。
No suitable servers found (`serverSelectionTryOnce` set): [Failed to resolve '<host>'].
ライブラリがこのエラーを報告する場合は、問題を解決するために次のセクションのメソッドを試してください。
データベース配置の可用性を確認
MongoDB Atlas に接続していて、ドライバーが Atlas データベース配置の DNS ホストを検出できない場合は、データベース配置が一時停止または削除される可能性があります。
データベース配置が Atlas に存在することを確認します。 クラスターが一時停止されている場合は、Atlas UI またはAtlas コマンドラインインターフェイスでクラスターを再開できます。
クラスターを再開する方法については、Atlas ドキュメントの「 1 つのクラスターの再開」を参照してください。
ネットワーク アドレスの確認
接続 URI のネットワークアドレスまたはホスト名が正確であることを確認してください。
配置がMongoDB Atlasでホストされている場合は、「 クラスターへの接続 」チュートリアルに従って、Atlas 接続 URI を見つけることができます。