到目前为止,我还没有指定MongoDB数据目录,并且只有一个30gb的主分区。
我刚把空间用完了,又加了一个新硬盘。我如何传输我的数据(显然是在/var/lib/mongodb/中)并配置MongoDB,以便所有内容都在新磁盘上运行而不影响我现有的安装?
到目前为止,我还没有指定MongoDB数据目录,并且只有一个30gb的主分区。
我刚把空间用完了,又加了一个新硬盘。我如何传输我的数据(显然是在/var/lib/mongodb/中)并配置MongoDB,以便所有内容都在新磁盘上运行而不影响我现有的安装?
当前回答
以下是我所做的,希望对其他人有所帮助:
步骤:
Stop your services that are using mongodb Stop mongod - my way of doing this was with my rc file /etc/rc.d/rc.mongod stop, if you use something else, like systemd you should check your documentation how to do that Create a new directory on the fresh harddisk - mkdir /mnt/database Make sure that mongodb has privileges to read / write from that directory ( usually chown mongodb:mongodb -R /mnt/database/mongodb ) - thanks @DanailGabenski. Copy the data folder of your mongodb to the new location - cp -R /var/lib/mongodb/ /mnt/database/ Remove the old database folder - rm -rf /var/lib/mongodb/ Create symbolic link to the new database folder - ln -s /mnt/database/mongodb /var/lib/mongodb Start mongod - /etc/rc.d/rc.mongod start Check the log of your mongod and do some sanity checking ( try mongo to connect to your database to see if everything is all right ) Start your services that you stopped in point 1
没有必要告诉你,当你这样做的时候应该小心,特别是使用rm -rf,但我认为这是最好的方法。
当mongod运行时,永远不要尝试复制数据库目录,因为可能会有服务从它写/读,这将改变数据库的内容。
其他回答
解决它在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
如果在Ubuntu 12.04中通过apt-get安装,不要忘记删除-R mongodb:nogroup /path/to/new/directory。另外,修改/etc/mongodb.conf的配置。
提醒一下,mongodb-10gen包现在是通过upstart启动的,所以配置脚本在/etc/init/mongodb.conf中
我刚刚浏览了一下,希望谷歌人会觉得有用:)
我发现了一个导致符号链接出现故障的特殊情况:
我做了一个标准的mongodb企业安装,但是将/var/lib/mongodb更改为符号链接,因为我想使用XFS文件系统作为我的数据库文件夹,第三个文件系统用于日志文件夹。
$sudo systemctl start mongod(失败,提示没有权限写入mongodb.log)..但是如果我用相同的配置文件启动,它就成功了:
. .作为外部驱动器(ziggy)的所有者,我能够启动 $mongod——config /etc/mongodb.conf——fork
我最终发现…符号链接指向不同的文件系统,mongodb(用户)没有权限浏览符号链接引用的文件夹。符号链接和符号链接所引用的文件夹都对mongod用户具有扩展权限,所以这没有意义吗?
/var/log/mongodb(从std安装)被更改为符号链接,我之前检查过:
$ 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…但是它无法通过符号链接找到它,因为媒体的BASE文件夹无法被mongodb搜索到。
所以. .最后我是这样做的: $ ll /media/ziggy/ . . drwx------ 5 ziggy ziggy 4096 10月28日21:49 XFS_DB/
并发现违规缺失x权限..
$chmod a+x /media/ziggy/XFS_DB解决了这个问题
事后看来似乎很愚蠢,但没有任何有用的搜索结果。
对我来说,用户是mongod而不是mongodb
sudo chown mongod
如果服务失败,您可以查看错误日志:
/var/log/mongodb/mongod.log
如果您想更改默认路径,下面的命令将为您工作。 只需在mongodb的bin目录中输入这个。
mongod --dbpath=yourdirectory\data\db
如果您也想移动现有数据,那么只需在执行命令之前将所有文件夹从现有data\db目录复制到新目录。
同时停止正在运行的mongodb服务。