MongoDB は標準プログラムとして実行されます。 mongodコマンドを発行してオプションを指定すると、コマンドラインから MongoDB を起動できます。 オプションのリストについては、 mongodリファレンスを参照してください。 MongoDB は Windows サービスとして実行することもできます。 詳しくは、「 MongoDB Community Edition を Windows サービスとして起動する」を参照してください。 MongoDB をインストールするには、「 MongoDB のインストール 」を参照してください。
次の例えでは、mongod プロセスを含むディレクトリがシステム パス内にあることを前提としています。mongod プロセスは、個々のサーバー上で実行されるプライマリ データベース プロセスです。mongos は、クライアントの観点から見ると mongod と同等の一貫した MongoDB インターフェースを提供します。mongosh バイナリは管理 shell を提供します。
このドキュメントでは、mongod プロセスについて説明します。ただし、このドキュメントの一部は、mongos インスタンスにも当てはまる場合があります。
mongodプロセスの開始
デフォルトでは、MongoDB はポート 27017 でクライアントからの接続を listen し、データを /data/db ディレクトリに保存します。
Windows の場合、このパスは MongoDB を起動するドライブにあります。たとえば、--dbpath を指定しない場合、C:\ ドライブで MongoDB サーバーを起動すると、すべてのデータファイルが C:\data\db に保存されます。
すべてのデフォルトを使用して MongoDB を起動するには、システム shell で次のコマンドを実行します。
mongod
データディレクトリの指定
mongod でデータファイルを /data/db 以外のパスに保存する場合は、dbPath を指定できます。dbPath は、mongod を開始する前に存在している必要があります。存在しない場合は、ディレクトリと権限を作成して、mongod がこのパスにデータを読み書きできるようにします。権限の詳細については、セキュリティ操作のドキュメントを参照してください。
mongodがデータディレクトリとして使用する dbPath を指定するには、--dbpath オプションを使用します。次の呼び出しでは、mongod インスタンスが開始され、/srv/mongodb パスにデータが格納されます。
mongod --dbpath /srv/mongodb/
注意
mongod は、デプロイに関するトラブルシューティングを行う MongoDB エンジニアを支援するために、フルタイム診断データ取得メカニズムを備えています。このスレッドが失敗すると、元のプロセスが終了します。特に一般的な障害を回避するには、プロセスを実行しているユーザーに FTDC diagnostic.data ディレクトリを作成する権限があることを確認します。mongod の場合、このディレクトリは storage.dbPath 内にあります。mongos の場合は、systemLog.path と同じ階層にあります。
TCP ポートの指定
1 つのネットワーク インターフェース上の接続を同時に listen できるのはプロセスは 1 つだけです。単一のマシンで複数の mongod プロセスを実行する場合、またはこのポートを使用する必要がある他のプロセスが存在する場合には、それぞれにクライアント接続を listen する別のポートを割り当てる必要があります。
mongod にポートを指定するには、コマンドラインで --port オプションを使用します。次のコマンドは、ポート 12345 で listen する mongod を開始します。
mongod --port 12345
混乱を避けるために、可能な限りデフォルトのポート番号を使用してください。
mongodをデーモンとして起動する
mongodプロセスをデーモン(fork)として実行し、かつその出力をログファイルに書込み (write) するには、--fork と --logpath のオプションを使用します。ログディレクトリは作成する必要がありますが、ログファイルが存在しない場合は mongod によって作成されます。
次のコマンドでは、mongod をデーモンとして起動し、ログ出力を/var/log/mongodb/mongod.logに記録します。
mongod --fork --logpath /var/log/mongodb/mongod.log
追加の構成オプション
一般的な構成と一般的なユースケースの配置の概要については、「自己管理型配置のためのランタイムデータベース構成 」を参照してください。
mongodプロセスを停止
クリーン シャットダウンでは、mongod は保留中のすべての操作を完了し、すべてのデータをデータファイルにフラッシュして、すべてのデータファイルを閉じます。他のシャットダウンはクリーンではなく、データファイルの有効性を損なう可能性があります。
確実にクリーンなシャットダウンを行うには、常に次のいずれかの方法で mongod インスタンスをシャットダウンしてください。
使用 shutdownServer()
次のようにdb.shutdownServer()メソッドを使用して、 mongosh } からmongodをシャットダウンします。
use admin db.shutdownServer()
init スクリプトから同じメソッドを呼び出しても、同じ結果が得られます。
authorization が有効になっているシステムの場合、ユーザーは admin データベースに認証されているとき、または認証が有効になっていないシステム上の localhost インターフェース経由で認証された場合のみ db.shutdownServer() を実行できます。
使用 --shutdown
Linux でのみサポートされます。コマンドラインから、--shutdown オプションを使用して mongod をシャットダウンします。
mongod --shutdown
使用 CTRL-C
mongod インスタンスを対話モード(--forkなし)で実行している場合、クリーン シャットダウンを実行するには Control-C を実行します。
使用 kill
Linux と macOS でのみサポートされています。コマンドラインから、次のいずれかのコマンドを使用して特定の mongod インスタンスをシャットダウンします。
kill <mongod process ID> kill -2 <mongod process ID>
SIGTERM とレプリカセット
レプリカセットのプライマリが SIGTERM を受け取ると、プライマリはシャットダウンする前に降格を試みます。
降格が成功した場合、インスタンスはその後、新しいプライマリの選挙に投票せず、シャットダウンを続行します。
降格が失敗すると、インスタンスはシャットダウンを続行します。
SIGKILL
警告
mongod インスタンスを終了させるのに、kill -9(SIGKILL)は絶対に使用しないでください。
mongodプロセスのトラブルシューティング
バックトレースの生成
Linux で実行されている MongoDB インスタンスの場合:
mongodプロセスとmongosプロセスがSIGUSR2シグナルを受信すると、バックトレースの詳細が各プロセス スレッドのログに追加されます。バックトレースの詳細では、プロセスの関数呼び出しが表示されます。必要に応じて診断に使用したり、 MongoDB サポートに提供したりできます。
バックトレース機能はこれらのアーキテクチャで利用できます。
x86_64arm64( MongoDB 5.0.10以降 )
実行中の mongod プロセスに SIGUSR2 シグナルを発行するには、次のコマンドを使用します。
kill -SIGUSR2 <mongod process ID>
レプリカセットの停止
手順
mongod がレプリカセット内のプライマリである場合、このmongod インスタンスのシャットダウン プロセスには次の手順が含まれます。
レプリカセットの強制シャットダウン
最新のセカンダリがなく、プライマリをシャットダウンする場合は、次の 操作のように、mongosh shutdown引数を指定してforce コマンドを発行します。
db.adminCommand({shutdown : 1, force : true})
すぐに最新の状態になるセカンダリがない場合に、指定した秒数だけセカンダリをチェックし続けるには、timeoutSecs 引数を指定して shutdown を実行します。MongoDB は、どれもすぐに最新にならない場合、指定された秒数だけセカンダリをチェックし続けます。割り当てられた時間内にいずれかのセカンダリが追いついた場合、プライマリはシャットダウンします。どのセカンダリも追いつかなければ、シャットダウンしません。
次のコマンドは、timeoutSecs を 5 に設定して shutdown を実行します。
db.adminCommand({shutdown : 1, timeoutSecs : 5})
あるいは、db.shutdownServer() メソッドで timeoutSecs 引数を使用することもできます。
db.shutdownServer({timeoutSecs : 5})