到目前为止,我还没有指定一个MongoDB数据目录,并且只有一个30 GB的主分区。
我刚用完了空间并添加了一个新硬盘。如何传输我的数据(显然在/var/lib/mongodb/
中)并配置MongoDB以便所有内容都在新磁盘上运行而不会影响我现有的安装?
答案 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/Debian或CentOS/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.ns
和your_dbname.n
等名称,其中n
是以0开头的数字。如果您在/var/lib/mongodb
下未看到此类文件,请搜索对于他们的文件系统。
复制完毕后,通过--dbpath=/data/db
命令启动MongoDB时使用mongod
。
答案 5 :(得分:18)
这就是我所做的,希望它对其他人有帮助:
步骤:
/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运行时,你永远不应该尝试复制数据库目录,因为可能有从它写入/读取的服务会改变数据库的内容。
答案 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解决了问题
事后看来,这是愚蠢的,但是没有搜索发现有用的东西。