更改MongoDB数据存储目录

时间:2011-05-11 08:10:31

标签: mongodb

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

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

10 个答案:

答案 0 :(得分:187)

简短的回答是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/DebianCentOS/Fedora)附带一个基本配置文件,该文件放在/etc/mongodb.conf中,MongoDB服务在启动时读取它。你可以在这里做出改变。

答案 1 :(得分:88)

在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

答案 2 :(得分:26)

如果你没有,请在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

如果您使用mongoDB作为Windows服务,则必须更改此密钥并指定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它的配置文件及其logpath。

然后当你启动mongodb服务时,它可以工作。

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

希望它有所帮助,

答案 3 :(得分:24)

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

mongod --dbpath=yourdirectory\data\db

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

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

答案 4 :(得分:21)

/var/lib/mongodb的内容复制到/data/db。您应查找的文件应包含your_db_name.nsyour_dbname.n等名称,其中n是以0开头的数字。如果您在/var/lib/mongodb下未看到此类文件,请搜索对于他们的文件系统。

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

答案 5 :(得分:18)

这就是我所做的,希望它对其他人有帮助:

步骤:

  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点停止的服务
  11. 当你这样做时,没有必要告诉你应该小心,特别是rm -rf,但我认为这是最好的方法。

    在mongod运行时,你永远不应该尝试复制数据库目录,因为可能有从它写入/读取的服务会改变数据库的内容。

答案 6 :(得分:10)

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

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

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

答案 7 :(得分:1)

用户是mongod而不是mongodb

sudo chown mongod:mongod / newlocation

如果服务失败,您可以看到错误日志: -

/var/log/mongodb/mongod.log

答案 8 :(得分: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"}

答案 9 :(得分:0)

我发现一种特殊情况,导致符号链接似乎失败:

我对mongodb进行了标准的企业安装,但是将/ var / lib / mongodb更改为符号链接,因为我想对数据库文件夹使用XFS文件系统,对日志文件夹使用第三个文件系统。

$ sudo systemctl启动mongod(失败,并显示一条消息,没有写mongodb.log的权限)。但是,如果我使用相同的配置文件启动,则成功:

..作为外部驱动器的所有者(ziggy),我能够启动 $ mongod --config /etc/mongodb.conf --fork

我最终发现..符号链接指向另一个文件系统,而mongodb(用户)没有浏览符号链接引用的文件夹的权限。符号链接和符号链接引用的文件夹都对mongod用户具有扩展权限,所以这没有道理吗?

/ var / log / mongodb已从标准安装更改为符号链接,而我之前已经检查过:

$ 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可以通过rwx访问链接,文件夹和文件mongodb.log ..但它无法通过symlink找到它,因为BASE文件夹mongodb无法搜索该媒体。

SO ..我确实做到了: $ ll / media / ziggy / 。 。 drwx ------ 5 ziggy ziggy 4096 10月28日21:49 XFS_DB /

并发现缺少x权限的问题。

$ chmod a + x / media / ziggy / XFS_DB解决了问题

事后看来,这是愚蠢的,但是没有搜索发现有用的东西。