204

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

我刚刚用完了空间并添加了一个新硬盘。如何传输我的数据(显然在 中/var/lib/mongodb/)并配置 MongoDB,以便一切都在新磁盘上运行而不影响我现有的安装?

4

10 回答 10

239

简短的回答是,--dbpathMongoDB 中的参数将允许您控制 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/DebianCentOS/Fedora)附带一个基本配置文件,该文件位于/etc/mongodb.conf.MongoDB 服务启动时会读取此文件。您可以在这里进行更改。

于 2011-05-11T08:25:00.143 回答
118

在 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
于 2014-07-11T17:05:25.793 回答
40

如果您想更改默认路径,以下命令将为您工作。只需在 mongodb 的 bin 目录中输入即可。

mongod --dbpath=yourdirectory\data\db

如果您也想移动现有数据,则只需在执行命令之前将现有 data\db 目录中的所有文件夹复制到新目录即可。

并且还停止正在运行的现有 mongodb 服务。

于 2017-03-08T04:34:24.880 回答
29

如果没有,请在 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/

希望能帮助到你,

于 2014-08-14T08:25:20.737 回答
24

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

一旦复制过来,在通过命令--dbpath=/data/db启动 MongoDB 时使用。mongod

于 2011-05-11T08:24:15.770 回答
21

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

脚步:

  1. 停止使用 mongodb的服务
  2. 停止 mongod - 我这样做的方法是使用我的 rc 文件/etc/rc.d/rc.mongod stop,如果你使用其他东西,比如 systemd,你应该检查你的文档如何做到这一点
  3. 在新硬盘上创建一个新目录-mkdir /mnt/database
  4. 确保 mongodb 有权从该目录读取/写入(通常chown mongodb:mongodb -R /mnt/database/mongodb) - 感谢@DanailGabenski。
  5. 将 mongodb 的数据文件夹复制到新位置-cp -R /var/lib/mongodb/ /mnt/database/
  6. 删除旧的数据库文件夹-rm -rf /var/lib/mongodb/
  7. 创建指向新数据库文件夹的符号链接-ln -s /mnt/database/mongodb /var/lib/mongodb
  8. 启动 mongod -/etc/rc.d/rc.mongod start
  9. 检查您的 mongod 的日志并进行一些完整性检查(尝试mongo连接到您的数据库以查看是否一切正常)
  10. 启动您在第 1 点停止的服务

没有必要告诉你这样做时应该小心,特别是rm -rf但我认为这是最好的方法。

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

于 2014-12-21T11:31:38.737 回答
10

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

提醒一下,这个mongodb-10gen包现在是通过 upstart 启动的,所以配置脚本在/etc/init/mongodb.conf

我刚刚经历了这个,希望谷歌人觉得它有用:)

于 2013-05-21T01:26:18.207 回答
1

对我来说,用户mongod不是mongodb

sudo chown mongod:mongod /newlocation

如果服务失败,您可以查看错误日志:

/var/log/mongodb/mongod.log

于 2017-01-16T09:26:55.633 回答
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"}
于 2014-07-30T05:09:01.270 回答
0

我发现了一个导致符号链接失败的特殊情况:

我对 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 解决了这个问题

事后看来似乎很愚蠢,但没有搜索出任何有用的东西。

于 2020-11-01T17:57:43.943 回答