これまで、MongoDB データ ディレクトリを指定したことはなく、30 GB のプライマリ パーティションが 1 つしかありませんでした。
空き容量がなくなったので、新しいハードディスクを追加しました。/var/lib/mongodb/
既存のインストールに影響を与えずにすべてが新しいディスクから実行されるように、データ (これはどうやら にあります) を転送し、MongoDB を構成するにはどうすればよいですか?
これまで、MongoDB データ ディレクトリを指定したことはなく、30 GB のプライマリ パーティションが 1 つしかありませんでした。
空き容量がなくなったので、新しいハードディスクを追加しました。/var/lib/mongodb/
既存のインストールに影響を与えずにすべてが新しいディスクから実行されるように、データ (これはどうやら にあります) を転送し、MongoDB を構成するにはどうすればよいですか?
簡単に言えば、MongoDB の--dbpath
パラメーターを使用すると、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 サービスは起動時にこれを読み取ります。ここで変更を加えることができます。
2 分間のダウンタイムで解決しました :)
フォルダを移動し、シンボリック リンクを追加して、権限を調整するだけです。
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
持っていない場合は、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 をインストールするための完全なチュートリアルは次のとおりです 。
それが役に立てば幸い、
の内容を にコピー/var/lib/mongodb
し/data/db
ます。探しているファイルの名前 は、your_db_name.ns
およびyour_dbname.n
はn
0 から始まる数字です。 の下にそのようなファイルが表示されない場合は/var/lib/mongodb
、ファイル システムで検索してください。
コピーしたら--dbpath=/data/db
、コマンドでMongoDBを起動するときに使用しmongod
ます。
これが私がやったことです、それが他の誰かに役立つことを願っています:
手順:
/etc/rc.d/rc.mongod stop
。systemdなどの他のものを使用する場合は、ドキュメントを確認してください。mkdir /mnt/database
chown mongodb:mongodb -R /mnt/database/mongodb
) - @DanailGabenski に感謝します。cp -R /var/lib/mongodb/ /mnt/database/
rm -rf /var/lib/mongodb/
ln -s /mnt/database/mongodb /var/lib/mongodb
/etc/rc.d/rc.mongod start
mongo
し、健全性チェックを行います (データベースに接続して、すべてが正常かどうかを確認してください)。これを行うときに注意する必要があると言う必要はありませんが、rm -rf
これが最善の方法だと思います。
データベースのコンテンツを変更する書き込み/読み取りサービスが存在する可能性があるため、mongod の実行中にデータベース dir をコピーしようとしないでください。
Ubuntu 12.04 でインストールした場合apt-get
は、忘れずにchown -R mongodb:nogroup /path/to/new/directory
. また、 で設定を変更します/etc/mongodb.conf
。
念のため、mongodb-10gen
パッケージは upstart 経由で開始されるようになったため、構成スクリプトは次の場所にあります。/etc/init/mongodb.conf
私はちょうどこれを経験しました、グーグル社員がそれを役に立つと思うことを願っています:)
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"}
シンボリックリンクが失敗したように見える特殊なケースを見つけました:
mongodb の標準エンタープライズ インストールを行いましたが、データベース フォルダーに XFS ファイル システムを使用し、ログ フォルダーに 3 番目のファイル システムを使用したかったため、/var/lib/mongodb をシンボリック リンクに変更しました。
$sudo systemctl start mongod (mongodb.log への書き込み権限がないというメッセージが表示されて失敗します)。しかし、同じ構成ファイルで開始した場合は成功しました。
.. 外部ドライブ (ziggy) の所有者として、 $mongod --config /etc/mongodb.conf --fork を起動できました
最終的に、シンボリックリンクが別のファイルシステムを指しており、mongodb(ユーザー)には、シンボリックリンクが参照するフォルダーを参照する権限がないことがわかりました。シンボリックリンクとシンボリックリンクが参照するフォルダーの両方がmongodユーザーに広範な権限を持っていたので、意味がありませんでしたか?
/var/log/mongodb は (std ent インストールから) シンボリック リンクに変更され、以前に確認したことがあります。
$ ll /var/log/mongodb lrwxrwxrwx 1 mongodb mongodb 38 Oct 28 21:58 /var/log/mongodb -> /media/ziggy/XFS_DB/mongodb/log/
$ ll -d /media/ziggy/Ext4DataBase/mongodb/log drwxrwxrwx 2 mongodb mongodb 4096 11 月 1 12:05 /media/ashley/XFS_DB/mongodb/log/
..しかし、それは意味がないように見えました..もちろん、ユーザーmongodbはリンク、フォルダー、およびファイルmongodb.logへのrwxアクセスを持っていました..しかし、メディアのBASEフォルダーが見つからなかったため、シンボリックリンクを介してそれを見つけることができませんでしたmongodb によって検索されます。
だから..私は最終的にこれをしました: $ ll /media/ziggy/ . . drwx------ 5 ziggy ziggy 4096 10 月 28 日 21:49 XFS_DB/
問題のあるx権限の欠落が見つかりました..
$chmod a+x /media/ziggy/XFS_DB は問題を解決しました
後から考えるとばかげているように見えますが、検索しても何も役に立ちませんでした。