MongoDBデータストアディレクトリの変更


184

これまでは、MongoDBデータディレクトリを指定しておらず、30 GBのプライマリパーティションは1つしかありませんでした。

容量が足りなくなり、新しいハードディスクを追加しました。/var/lib/mongodb/既存のインストールに影響を与えずにすべてが新しいディスクから実行されるように、どうやってデータを転送し(これは明らかににあります)、MongoDBを構成できますか?


また、新しいマウントポイントのアクセス許可にr + xがあることを確認してください。sudo chmod o+rx /mediaたとえば、マウントポイントがの場合media。r + xは、「その他」のグループとユーザーが最初のマウントポイントから使用できるようにする必要があります。
wordsthewise

回答:


219

簡単に言え--dbpathば、MongoDB のパラメーターを使用すると、MongoDBがデータの読み取りと書き込みを行うディレクトリを制御できます。

mongod --dbpath / usr / local / mongodb-data

mongodbを起動し、ファイルをに配置します/usr/local/mongodb-data

ディストリビューションとMongoDBのインストールに応じて、mongod.confこれを自動的に行うようにファイルを構成することもできます。

# Store data in /usr/local/var/mongodb instead of the default /data/db
dbpath = /usr/local/var/mongodb

公式の10gen Linuxパッケージ(Ubuntu / DebianまたはCentOS / Fedora)には、に配置される基本構成ファイルが同梱されて/etc/mongodb.confおり、MongoDBサービスは起動時にこれを読み取ります。ここで変更を加えることができます。


9
私のdebianボックスでは、mongod.confではなくmongodb.confです
UpTheCreek

12
/etc/mongodb.confこのソリューションごとに更新しました。そして、起動後mongod、それ/data/dbが使われているのを見ました。mongodb.confを更新しても、mongodがdbを格納する場所に影響しなかったのはなぜですか?使用していること(注--dbpath引数が働いていた。
ケビン・メレディス

私のFedoraボックスでは/etc/mongodb.conf、アップデートが正常に機能しています。
tuxdna 2014

4
新しいデータディレクトリはchown、サービス開始スクリプト用のmongodユーザーに提供する必要があります。
ピートガラファノ2014

どのように私はchownを行うのですか?
不安定な

102

2分のダウンタイムでそれを解決しました:)
フォルダを移動し、symlinkを追加して、権限を調整します。

sudo service mongod stop
sudo mv mongodb /new/disk/mongodb/
sudo ln -s /new/disk/mongodb/ /var/lib/mongodb
sudo chown mongodb:mongodb /new/disk/mongodb/
sudo service mongod start

# test if mongodb user can access new location:
sudo -u mongodb -s cd /new/disk/mongodb/
# resolve other permissions issues if necessary
sudo usermod -a -G <newdisk_grp> mongodb

3
これが答えだと思います。私はいつも非常に良い解決策であることがシンボリックリンクを見つけると私はすべてのソリューションを促進する構成変更など。以上の用途にそれらを
男mograbi

おそらくusermodは必要ありません。dbpathのツリー上の「他の」ユーザーに対する+ x実​​行権限がありませんchmod -R o+x /<home>。参照: stackoverflow.com/a/38193187/205049
oori

私は(別のディスクにDBPATHを使用して)これらの指示に従ってください、私はまだ取得していますPermission denied: "/var/lib/mongodb"。このことは、どのようような/home/../mongodb/mongodb/ルックス: drwxrwxr-x 3 mongodb mongodb 4096 oct 13 09:32 ../ drwxr-xr-x 2 mongodb nogroup 4096 oct 13 09:29 journal/ -rw------x 1 mongodb nogroup 67108864 sep 23 14:44 local.0* -rw------x 1 mongodb nogroup 16777216 sep 23 14:44 local.ns* -rwxr-xr-x 1 mongodb mongodb 0 oct 13 09:29 mongod.lock*
Machinerium

1
mvコマンドを実行するときに、どのフォルダーにいるのかを明確にする必要があります。lib内からmvコマンドを実行すると、mongodb to lnto
Andy

1
私はあなたの解決策を試しましたが、アプリケーションを再起動すると、次のエラーが発生します-2019-11-18T18:58:45.215 + 1100 I STORAGE [initandlisten] exception in initAndListen:28596 Unable to status of lock file in data directory / var / lib / mongo:boost :: filesystem :: status:Permission denied: "/var/lib/mongo/mongod.lock"、termination
Arun chauhan

33

デフォルトのパスを変更する場合は、次のコマンドを使用できます。これをmongodbのbinディレクトリに入力するだけです。

mongod --dbpath=yourdirectory\data\db

既存のデータも移動したい場合は、コマンドを実行する前に、既存のdata \ dbディレクトリから新しいディレクトリにすべてのフォルダーをコピーしてください。

また、実行中の既存のmongodbサービスも停止します。


1
これはLinuxでも動作します。mondodスクリプトの横に「data」というディレクトリを作成し、次のように実行します:./mongod --dbpath = data
cagdasalagoz

29

MongoDBフォルダーにmongod.cfgというファイルがない場合は作成します。私の場合:C:\ Users \ ivanbtrujillo \ MongoDB

次に、メモ帳でmongod.cfgを編集し、次の行を追加します(カスタムdbpath)。

dbpath=C:\Users\ivanbtrujillo\MongoDB\data\db

このファイルでは、ログパスも指定する必要があります。私のmongod.cfgファイルは:

logpath=C:\Users\ivanbtrujillo\MongoDB\log\mongo.log
dbpath=C:\Users\ivanbtrujillo\MongoDB\data\db

WindowsサービスとしてmongoDBを使用する場合は、このキーを変更して、mongod.cfgファイルを指定する必要があります。

mongodbをWindowsサービスとしてインストールするには、次のコマンドを実行します。

**"C:\Users\ivanbtrujillo\MongoDB\bin\mongod.exe" --config "C:\Users\ivanbtrujillo\MongoDB\mongod.cfg" install**

regedit.exeを開き、次のルートに移動します。

HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\services\MongoDB

MongoDBサービスは機能しません。ImagePathキーを編集し、そのコンテンツを削除して、以下を配置する必要があります。

**"C:\Users\ivanbtrujillo\MongoDB\bin\mongod.exe" --config "C:\Users\ivanbtrujillo\MongoDB\mongod.cfg" 
--logpath="C:\Users\ivanbtrujillo\MongoDB\log\mongo.log" service**

設定ファイルとそのログパスをmongoに示す。

その後、mongodbサービスを初期化すると機能します。

これは、WindowsにmongoDBをインストールするための完全なチュートリアルです。http://ivanbtrujillo.herokuapp.com/2014/07/24/installing-mongodb-as-a-service-windows/

それが役に立てば幸い、


1
MongoDB 2.6以降はYAML設定ファイルを使用します。古い形式は下位互換性のために引き続きサポートされていますが、新しい形式を使用することもできます。詳細はこちら
gronostaj

Linuxにもdbpath変数が存在します。/etc/mongod.confを調べます。
xpros 2015

23

の内容を/var/lib/mongodbにコピーし/data/dbます。探しているファイルの名前は your_db_name.nsyour_dbname.nnは0から始まる番号です。の下/var/lib/mongodbにそのようなファイルが見つからない場合は、ファイルシステムで検索してください。

コピーしたら--dbpath=/data/dbmongodコマンドを使用してMongoDBを起動するときに使用します。


サーバーが再起動するたびにこれを実行する方法はありますか?
user4951 2012

1
@JimThioこのスイッチを、mongodbを起動するシェルスクリプトに追加できます。通常は/etc/init.d/mongodまたは/etc/init.d/mongodbです。
lobster1234 2012

19

これが私がしたことです、それが他の誰にも役立つことを願っています:

手順:

  1. サービスを停止mongodbを使用しているを
  2. mongodを停止 -これを行う私の方法はrcファイルを使用することでした/etc/rc.d/rc.mongod stopを使用すること systemdなどの他の何かを使用する場合は、その方法をドキュメントで確認する必要があります
  3. 新しいハードディスクに新しいディレクトリ作成します -mkdir /mnt/database
  4. mongodbがそのディレクトリ(通常chown mongodb:mongodb -R /mnt/database/mongodbからの読み取り/書き込み権限を持っていることを確認してください -@DanailGabenskiに感謝します。
  5. mongodbのデータフォルダーを新しい場所にコピーします -cp -R /var/lib/mongodb/ /mnt/database/
  6. 古いデータベースフォルダーを削除します -rm -rf /var/lib/mongodb/
  7. 新しいデータベースフォルダへのシンボリックリンクを作成します -ln -s /mnt/database/mongodb /var/lib/mongodb
  8. mongodを開始 -/etc/rc.d/rc.mongod start
  9. mongod のログチェックし、いくつかの健全性チェックmongoを行います(データベースに接続して、すべてが正常かどうかを確認します)
  10. ポイント1で停止したサービス開始します

これを行う場合は特に注意が必要であると伝える必要はありませんが、rm -rfこれが最善の方法だと思います。

mongodの実行中にデータベースdirをコピーしようとしないでください。データベースのコンテンツを変更するサービスから読み取りまたは読み取りを行うサービスが存在する可能性があるためです。


1
古い答えですが、それは私には部分的にうまくいきました。また、mongodbユーザーが新しいディレクトリとsymlikを所有することを確認して、それが機能するようにする必要があります。chown mongodb:mongodb -R /mnt/database/mongodb
Danail Gabenski、2018年

3
ポイント5で、コマンドをcp -rp / var / lib / mongodb / / mnt / database /のように作成します。これにより、フォルダーの所有権とアクセス権はそのまま保持されます。
Ketan Ghumatkar

私はあなたの解決策を試しましたが、アプリケーションを再起動すると、次のエラーが発生します-2019-11-18T18:58:45.215 + 1100 I STORAGE [initandlisten] exception in initAndListen:28596 Unable to status of lock file in data directory / var / lib / mongo:boost :: filesystem :: status:Permission denied: "/var/lib/mongo/mongod.lock"、terending
Arun chauhan

10

apt-getUbuntu 12.04 を介してインストールする場合は、を忘れないでくださいchown -R mongodb:nogroup /path/to/new/directory。また、設定を変更します/etc/mongodb.conf

注意として、 mongodb-10genパッケージはupstartを介して開始されるようになったので、構成スクリプトは/etc/init/mongodb.conf

私はこれを経験しました、グーグルがそれが役に立つことを願っています


1

私にとって、ユーザーはではmongodなくmongodb

sudo chown mongod:mongod /newlocation

サービスが失敗した場合は、エラーのログを確認できます。

/var/log/mongodb/mongod.log


0

debian / ubuntuでは、/ etc / init.d / mongodbスクリプトを編集する必要があります。本当に、このファイルは/etc/mongodb.confから設定をプルしているはずですが、デフォルトのディレクトリをプルしていないようです(おそらくバグ)。

これは少しハックですが、これらをスクリプトに追加すると正しく起動します。

追加:

DBDIR=/database/mongodb

変化する:

DAEMON_OPTS=${DAEMON_OPTS:-"--unixSocketPrefix=$RUNDIR --config $CONF run"}

に:

DAEMON_OPTS=${DAEMON_OPTS:-"--unixSocketPrefix=$RUNDIR --dbpath $DBDIR --config $CONF run"}

ルートではなくホームディレクトリにデータベースを配置する場合はどうでしょうか。
JesseBoyd 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.