到目前为止,我还没有指定 MongoDB 数据目录,并且只有一个 30 GB 的主分区。
我刚刚用完了空间并添加了一个新硬盘。如何传输我的数据(显然在 中/var/lib/mongodb/
)并配置 MongoDB,以便一切都在新磁盘上运行而不影响我现有的安装?
到目前为止,我还没有指定 MongoDB 数据目录,并且只有一个 30 GB 的主分区。
我刚刚用完了空间并添加了一个新硬盘。如何传输我的数据(显然在 中/var/lib/mongodb/
)并配置 MongoDB,以便一切都在新磁盘上运行而不影响我现有的安装?
简短的回答是,--dbpath
MongoDB 中的参数将允许您控制 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 服务启动时会读取此文件。您可以在这里进行更改。
在 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
如果您想更改默认路径,以下命令将为您工作。只需在 mongodb 的 bin 目录中输入即可。
mongod --dbpath=yourdirectory\data\db
如果您也想移动现有数据,则只需在执行命令之前将现有 data\db 目录中的所有文件夹复制到新目录即可。
并且还停止正在运行的现有 mongodb 服务。
如果没有,请在 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 指示它的配置文件及其日志路径。
然后,当您初始化 mongodb 服务时,它就可以工作了。
这是在 Windows 中安装 mongoDB 的完整教程:http: //ivanbtrujillo.herokuapp.com/2014/07/24/installing-mongodb-as-a-service-windows/
希望能帮助到你,
复制/var/lib/mongodb
to的内容/data/db
。您应该查找的文件应具有类似的名称 your_db_name.ns
,your_dbname.n
其中n
是一个以 0 开头的数字。如果您在 下没有看到此类文件,请/var/lib/mongodb
在您的文件系统中搜索它们。
一旦复制过来,在通过命令--dbpath=/data/db
启动 MongoDB 时使用。mongod
这是我所做的,希望对其他人有帮助:
脚步:
/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 运行时尝试复制数据库目录,因为可能存在写入/读取它的服务会更改数据库的内容。
如果apt-get
在 Ubuntu 12.04 中安装,不要忘记chown -R mongodb:nogroup /path/to/new/directory
. 另外,更改配置/etc/mongodb.conf
。
提醒一下,这个mongodb-10gen
包现在是通过 upstart 启动的,所以配置脚本在/etc/init/mongodb.conf
我刚刚经历了这个,希望谷歌人觉得它有用:)
对我来说,用户mongod
不是mongodb
sudo chown mongod:mongod /newlocation
如果服务失败,您可以查看错误日志:
/var/log/mongodb/mongod.log
在 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"}
我发现了一个导致符号链接失败的特殊情况:
我对 mongodb 进行了标准企业安装,但将 /var/lib/mongodb 更改为符号链接,因为我想为我的数据库文件夹使用 XFS 文件系统,为日志文件夹使用第三个文件系统。
$sudo systemctl start mongod(失败并显示没有权限写入 mongodb.log).. 但如果我从相同的配置文件开始,它会成功:
..作为外部驱动器(ziggy)的所有者,我能够启动 $mongod --config /etc/mongodb.conf --fork
我最终发现 .. 符号链接指向不同的文件系统,而 mongodb (用户)没有权限浏览符号链接所引用的文件夹。符号链接和符号链接所引用的文件夹都对 mongod 用户具有广泛的权限,所以这没有意义吗?
/var/log/mongodb 已更改(从 std ent 安装)为符号链接,并且我之前检查过:
$ 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 Nov 1 12:05 /media/ashley/XFS_DB/mongodb/log/
..但这似乎没有任何意义..当然用户mongodb有rwx访问链接,文件夹和文件mongodb.log ..但它无法通过符号链接找到它,因为媒体的BASE文件夹无法被mongodb搜索。
所以..我最终做到了: $ ll /media/ziggy/ 。. drwx------ 5 ziggy ziggy 4096 Oct 28 21:49 XFS_DB/
并发现有问题的缺少 x 权限..
$chmod a+x /media/ziggy/XFS_DB 解决了这个问题
事后看来似乎很愚蠢,但没有搜索出任何有用的东西。