我在不同的地方有两台电脑(所以不可能使用同一个 wifi 网络)。一个包含大约 50GB 的数据(MongoDB 文件),我想将其移动到第二个具有更多计算能力的分析。但是我怎样才能让第二台机器上的 MongoDB 识别那个文件夹呢?
问问题
21053 次
4 回答
24
当你开始mongod
进程时,你向它提供一个参数,它--dbpath /directory
是如何知道数据文件夹在哪里的。
您需要做的就是:
- 停止
mongod
旧计算机上的进程。等到它退出。 - 将整个 /data/db 目录复制到新计算机
mongod
在新计算机上启动进程并为其提供--dbpath /newdirectory
参数。
新mongod
机器上的 将使用您用 --dbpath 指定的文件夹。无需“识别”,因为该文件夹中没有特定的机器,它只是数据。
于 2012-10-06T13:01:19.670 回答
2
我最近自己做了这个,我想提供一些额外的注意事项,以防读者(像我一样)遇到问题。
以下信息特定于 *nix 系统,但它可能适用于对 Windows 进行大量修改的情况。
如果源数据位于您仍然可以运行的 mongo 服务器中(首选)
查看并使用mongodump
and mongorestore
。这可能更安全,并且是迁移数据库的官方方式。
如果你从来没有转储过,也不能再转储了
可以,可以直接复制数据目录;但是,您还需要确保mongodb
用户在复制目录后具有对目录的完全访问权限。
我的步骤如下。在您要将旧数据库传输到的机器上:
- 编辑
/etc/mongod.conf
dbPath 字段并将其更改为所需位置。 - 使用以下脚本作为参考,或对其进行定制并在您的系统上运行,风险自负。
- 我不保证这适用于每个系统 --> 请手动验证。
- 我也不能保证它在每种情况下都能完美运行。
- 警告:将删除您指定的目标数据目录中的所有内容。
- 但是,我可以说它在我的系统上运行,并且通过了
shellcheck
. - 重要的部分是简单地复制旧的数据库目录,并
mongodb
通过chown
.
#!/bin/bash
TARGET_DATA_DIRECTORY=/path/to/target/data/directory # modify this
SOURCE_DATA_DIRECTORY=/path/to/old/data/directory # modify this too
echo shutting down mongod...
sudo systemctl stop mongod
if test "$TARGET_DATA_DIRECTORY"; then
echo removing existing data directory...
sudo rm -rf "$TARGET_DATA_DIRECTORY"
fi
echo copying backed up data directory...
sudo cp -r "$SOURCE_DATA_DIRECTORY" "$TARGET_DATA_DIRECTORY"
sudo chown -R mongodb "$TARGET_DATA_DIRECTORY"
echo starting mongod back up...
sudo systemctl start mongod
sudo systemctl status mongod # for verification
于 2021-01-25T23:17:33.773 回答
1
对于 Windows 来说很容易,只需将数据文件夹移动到目标位置运行 cmd "C:\your\mongodb\bin-path\mongod.exe" --dbpath="c:\what\ever\path\data\db"
于 2018-08-03T22:16:45.607 回答
-1
也许您没有做的是导出或转储数据库。数据库不可移植,因此必须导出或创建为转储文件。
于 2017-08-20T20:54:44.510 回答