2011-05-11 91 views
125

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

我刚用尽空间并添加了新的硬盘。如何传输我的数据(显然在/var/lib/mongodb/中)并配置MongoDB,以便在不影响现有安装的情况下从新磁盘运行所有内容?

回答

20

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

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

+0

有没有办法让服务器重新启动时发生这种情况? – 2012-08-30 10:48:13

+1

@JimThio你可以将此开关添加到启动mongodb的shell脚本中。通常它是/etc/init.d/mongod或/etc/init.d/mongodb。 – lobster1234 2012-09-04 21:33:03

157

简短的回答是,MongoDB中的参数--dbpath将允许您控制MongoDB读取和写入数据的目录。

mongod的--dbpath在/ usr /本地/ MongoDB的数据

将开始的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服务在启动时会读取它。你可以在这里做出改变。

+9

在我的debian机器上,它是mongodb.conf,而不是mongod.conf – UpTheCreek 2012-05-07 08:20:53

+6

我更新了'/ etc/mongodb.conf'这个解决方案。然后,在启动'mongod'后,我看到使用了'/ data/db'。为什么更新mongodb.conf不会影响mongod存储数据库的位置? (请注意,使用'--dbpath'参数工作 – 2013-10-07 13:03:18

+0

在我的Fedora盒子上它是'/ etc/mongodb.conf'并且更新对我来说工作正常 – tuxdna 2014-02-06 18:49:07

10

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

提醒一下,在mongodb-10gen包现在通过新贵开始,所以配置脚本是/etc/init/mongodb.conf

我只是通过这个去了,希望Google员工发现它有用:)

79

在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 
+3

我认为这应该是答案。我总是发现符号链接是一个非常好的解决方案,我推动任何使用它们来改变配置的解决方案。 – 2014-12-15 06:22:11

+0

可能不需要usermod你在dbpath的目录树chmod -R o + x/'''中缺少对“其他”用户的+ x可执行权限,参见:http://stackoverflow.com/ a/38193187/205049 – oori 2016-07-04 23:06:20

+0

我按照这些说明(在另一个磁盘上使用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 2016-10-13 12:55:15

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"} 
+0

如果要将数据库置于主目录而不是root用户该怎么办? – JesseBoyd 2016-12-26 02:20:57

21

如果您没有它,请在MongoDB文件夹中创建一个名为mongod.cfg的文件。在我的情况: C:\用户\ 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服务,你必须改变这个键和E指定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它的合作nfig文件及其日志路径。

然后,当您初始化mongodb服务时,它可以正常工作。

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

希望它能帮助,

+0

MongoDB 2.6和更新版本使用YAML配置文件。旧格式仍支持向后兼容性,但您可能需要使用新格式。详情[here](http://docs.mongodb.org/manual/reference/configuration-options/#storage-options)。对于linux,dbpath变量也存在于 – gronostaj 2015-07-16 08:43:56

+0

之中。查看/etc/mongod.conf。 – xpros 2015-08-28 16:47:39

11

这里是我做的,希望是有帮助的其他人:

步骤:

  1. 停止您的服务正在使用mongodb
  2. 停止mongod的 - 我这样做,这是我的RC文件/etc/rc.d/rc.mongod stop,如果你用别的东西,比如systemd你应该检查你的文档如何做到这一点
  3. 上新鲜的硬盘创建一个新的目录的方式 - mkdir /mnt/database
  4. 复制你的MongoDB的数据文件夹复制到新的位置 - cp -R /var/lib/mongodb/ /mnt/database/
  5. 删除旧的数据库文件夹 - rm -rf /var/lib/mongodb/
  6. 创建符号链接到新的数据库文件夹 - ln -s /mnt/database/mongodb /var/lib/mongodb
  7. 开始的mongod - /etc/rc.d/rc.mongod start
  8. 检查日志您的mongod的,并做一些健全检查(尝试mongo连接到你的数据库,看看一切都很好)
  9. 启动服务您在点停止1

有没有必要告诉你,当你这样做时应该小心,特别是rm -rf,但我认为这是做到这一点的最佳方式。

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

1

用户的mongod代替MongoDB的

须藤CHOWN的mongod:mongod的/ newlocation

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

/var/log/mongodb/mongod.log

7

对于Windows 10, 如果您想将默认路径更改为以下路径--- 只需在mongodb的bin目录中输入以下命令:

mongod的--dbpath = yourdirectory \ DATA \ DB

如果你想太多移动现有的数据,那么就从现有的数据\ db目录的所有文件夹复制到新目录中执行命令之前。 也停止正在运行的现有mongodb服务。 希望它有帮助。