更改MongoDB数据存储目录

Mar*_*ill 171 data-files filepath mongodb

到目前为止,我还没有指定MongoDB数据目录,只有一个30 GB的主分区.

我刚用完了空间并添加了一个新的硬盘.如何传输我的数据(显然是在/var/lib/mongodb/)并配置MongoDB以便所有内容都在新磁盘上运行而不会影响我现有的安装?

Bre*_*ams 205

简短的回答是--dbpathMongoDB 中的参数将允许您控制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
Run Code Online (Sandbox Code Playgroud)

官方10gen Linux软件包(Ubuntu/DebianCentOS/Fedora)附带一个基本配置文件,/etc/mongodb.confMongoDB服务在启动时会读取它.你可以在这里做出改变.

  • 我根据这个解决方案更新了`/ etc/mongodb.conf`.然后,在启动`mongod`之后,我看到使用了`/ data/db`.为什么更新mongodb.conf不会影响mongod存储db的位置?(注意使用`--dbpath`参数有效. (11认同)
  • 在我的debian框中,它是mongodb.conf,而不是mongod.conf (9认同)
  • 需要为mongod用户"chown"新的数据目录以获取服务启动脚本. (3认同)

Dmi*_*lov 94

在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
Run Code Online (Sandbox Code Playgroud)

  • 我认为这应该是答案.我总是发现符号链接是一个非常好的解决方案,我推广任何使用它们而不是改变配置等的解决方案. (3认同)

Yog*_*har 29

如果要更改默认路径,以下命令将适用于您.只需在mongodb的bin目录中输入.

mongod --dbpath=yourdirectory\data\db
Run Code Online (Sandbox Code Playgroud)

如果您还想移动现有数据,则只需在执行命令之前将所有文件夹从现有data\db目录复制到新目录.

并且还停止正在运行的现有mongodb服务.

  • 这也适用于 Linux。我在 mondod 脚本旁边创建了一个名为“data”的目录并像这样运行它:./mongod --dbpath=data (2认同)

小智 26

如果你没有它,在MongoDB文件夹中创建一个名为mongod.cfg的文件.就我而言:C:\ Users\ivanbtrujillo\MongoDB

然后,使用记事本编辑mongod.cfg并添加一行包含以下内容(我们的自定义dbpath):

dbpath=C:\Users\ivanbtrujillo\MongoDB\data\db
Run Code Online (Sandbox Code Playgroud)

在此文件中,您还应该指定日志路径.我的mongod.cfg文件是:

logpath=C:\Users\ivanbtrujillo\MongoDB\log\mongo.log
dbpath=C:\Users\ivanbtrujillo\MongoDB\data\db
Run Code Online (Sandbox Code Playgroud)

如果您使用mongoDB作为Windows服务,则必须更改此密钥并指定mongod.cfg文件.

要将mongodb安装为Windows服务,请运行以下命令:

**"C:\Users\ivanbtrujillo\MongoDB\bin\mongod.exe" --config "C:\Users\ivanbtrujillo\MongoDB\mongod.cfg" –install**
Run Code Online (Sandbox Code Playgroud)

打开regedit.exe并转到以下路由:

HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\services\MongoDB
Run Code Online (Sandbox Code Playgroud)

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**
Run Code Online (Sandbox Code Playgroud)

我们指出mongo它的配置文件及其logpath.

然后,当你启动mongodb服务时,它的工作原理.

这是一个在windows中安装mongoDB的完整教程:http://ivanbtrujillo.herokuapp.com/2014/07/24/installing-mongodb-as-a-service-windows/

希望能帮助到你,


lob*_*234 22

复制的内容/var/lib/mongodb/data/db.您应该查找的文件应该具有类似的名称 your_db_name.ns,your_dbname.n其中n是从0开始的数字.如果您没有看到此类文件/var/lib/mongodb,请在您的文件系统上搜索它们.

复制--dbpath=/data/db完毕后,通过mongod命令启动MongoDB时使用.


dri*_*hev 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运行时,您永远不应该尝试复制数据库目录,因为可能存在从其写入/读取的服务,这将改变数据库的内容.

  • 在第5点,make命令看起来像cp -rp/var/lib/mongodb// mnt/database /这将保持文件夹的所有权和权限不变. (3认同)

Rob*_*rto 10

如果通过apt-getUbuntu 12.04 安装,请不要忘记chown -R mongodb:nogroup /path/to/new/directory.另外,更改配置/etc/mongodb.conf.

提醒一下,该mongodb-10gen软件包现在通过upstart启动,因此配置脚本就在/etc/init/mongodb.conf

我刚刚经历过这个,希望googlers发现它很有用:)