修改MongoDB数据存储目录

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

我刚把空间用完了,又加了一个新硬盘。我如何传输我的数据(显然是在/var/lib/mongodb/)和配置MongoDB,使一切运行的新磁盘不影响我现有的安装?

303190 次浏览

/var/lib/mongodb的内容复制到/data/db。你要找的文件应该有your_db_name.nsyour_dbname.n这样的名字,其中n是一个以0开头的数字。如果在/var/lib/mongodb下没有看到这样的文件,请在文件系统中搜索它们。

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

简单的回答是,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服务在启动时读取该配置文件。您可以在这里找零。

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

提醒一下,mongodb-10gen包现在是通过upstart启动的,所以配置脚本在/etc/init/mongodb.conf

我刚刚浏览了一下,希望谷歌人会觉得有用:)

解决它在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

在debian/ubuntu中,你需要编辑/etc/init.d / mongodb脚本。 实际上,这个文件应该从/etc/mongodb.conf中提取设置 但它似乎没有拉出默认目录(可能是一个错误)

这是一个有点hack,但添加这些到脚本使它正确启动:

添加:

DBDIR=/database/mongodb

变化:

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

:

DAEMON_OPTS=${DAEMON_OPTS:-"--unixSocketPrefix=$RUNDIR --dbpath $DBDIR --config $CONF run"}
如果没有,在MongoDB文件夹中创建一个名为mongo .cfg的文件。在我的例子中: C:\Users\ ivanbtrujillo \ MongoDB < / p >

然后,用记事本编辑mongo .cfg,并添加如下一行(我们的自定义dbpath):

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

在这个文件中,您还应该指定日志路径。我的mongo .cfg文件是:

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

如果您使用mongoDB作为windows服务,您必须更改此密钥并指定mongo .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/ < / p >

希望能有所帮助,

以下是我所做的,希望对其他人有所帮助:

步骤:

  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. __abc1 - __abc0
  6. __abc1 - __abc0
  7. __abc1 - __abc0
  8. __abc1 - __abc0
  9. 你的mongod的检查日志,并做一些健全检查(尝试mongo连接到你的数据库,看看是否一切正常)
  10. 开始服务,你停止在点1

没有必要告诉你在这样做的时候应该小心,特别是使用rm -rf,但我认为这是最好的方法。

当mongod运行时,永远不要尝试复制数据库目录,因为可能会有服务从它写/读,这将改变数据库的内容。

对我来说,用户是mongod而不是mongodb

sudo chown mongod:mongod /newlocation

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

/var/log/mongodb/mongod.log

如果您想更改默认路径,以下命令将为您工作。 只要在mongodb的bin目录中输入这个

mongod --dbpath=yourdirectory\data\db

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

同时停止正在运行的mongodb服务。

我发现了一个导致符号链接出现故障的特殊情况:

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

$sudo systemctl start mongod(失败,提示没有权限写入mongodb.log)..但是如果我用相同的配置文件启动,它就成功了:

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

.conf

我最终发现…符号链接指向不同的文件系统,mongodb(用户)没有权限浏览符号链接引用的文件夹。符号链接和符号链接所引用的文件夹都对mongod用户具有扩展权限,所以这没有意义吗?

/var/log/mongodb(从std安装)被更改为符号链接,我之前检查过:

$ ll /var/log/mongodb . lrwxrwxrwx 1 mongodb mongodb 38 Oct 28 21:58 /var/log/mongodb ->/媒体/瑞格/ XFS_DB / mongodb /日志/ < / p >

$ ll -d /media/ziggy/Ext4DataBase/mongodb/log drwxrwxrwx 2 mongodb mongodb 4096 Nov 1 12:05 /media/ashley/XFS_DB/mongodb/log/

.. 但这似乎没有任何意义。当然,用户mongodb有RWX访问链接,文件夹和文件mongodb.log…但是它无法通过符号链接找到它,因为媒体的BASE文件夹无法被mongodb搜索到。

< p > . .最后我是这样做的: $ ll /media/ziggy/ . . drwx------ 5 ziggy ziggy 4096 10月28日21:49 XFS_DB/

并发现违规缺失x权限..

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

事后看来似乎很愚蠢,但没有任何有用的搜索结果。