我怎么知道 mongoDB 在哪里存储数据? (它不在默认的 /data/db 中!)

Posted

技术标签:

【中文标题】我怎么知道 mongoDB 在哪里存储数据? (它不在默认的 /data/db 中!)【英文标题】:How can I tell where mongoDB is storing data? (its not in the default /data/db!) 【发布时间】:2011-11-07 00:42:05 【问题描述】:

我的主机带有一个 mongodb 实例,并且没有 /db 目录,所以现在我想知道如何才能找出数据实际存储在哪里。

【问题讨论】:

对此有一个更新的问题有更好的答案:"What is the default database path for mongodb?"。数据路径将是默认的 /data/db(如果没有使用配置文件)或可通过 db.adminCommand("getCmdLineOpts").parsed.dbpath 发现。 在 OSX、mongo 3.0.4 上,我不得不使用 "db.adminCommand("getCmdLineOpts").parsed.storage.dbPath" @Stennie 你的评论帮助了我(我在 Windows 上,所以我使用 Robomongo),但你的问题链接指向这个问题,而不是你的预期目标 -- ***.com/a/12738557/112764 --而在 3.x 中,它实际上是 db.adminCommand("getCmdLineOpts").parsed.storage.dbpath @NateJ 谢谢! answer on the related question 有 MongoDB 2.6+ 的示例以及 admin 数据库或使用 adminCommand:db.serverCmdLineOpts().parsed.storage.dbPath (MongoDB 2.6+)。 【参考方案1】:

你的配置文件是怎么说的?

$ grep dbpath /etc/mongodb.conf

如果不正确,试试这个,你的数据库文件将出现在列表中:

$ sudo lsof -p `ps aux | grep mongodb | head -n1 | tr -s ' ' | cut -d' ' -f 2` | grep REG

在我的默认安装 (Ubuntu 11.04) 上是 /var/lib/mongodb/*

请注意,为方便起见,还有一个 /var/lib/mongodb/mongod.lock 文件包含 mongod PID,但它位于数据目录中 - 我们正在寻找...

【讨论】:

此服务器上没有 /var/lib 目录,这两个命令不起作用(第一个找不到 /etc/mongodb.conf 第二个无法识别 lsof) 也许您应该为您的主机添加信息。看起来不像是 Ubuntu 之类的发行版。 在 Ubuntu 16.04 mongodb v3.4.10 上,它是$ grep dbPath /etc/mongod.conf【参考方案2】:

mongod 默认数据库位置为/data/db/

如果您运行ps -xa | grep mongod 并且您没有看到--dbpath 明确告诉mongod 查看数据库位置的该参数并且您的mongodb.conf 中没有dbpath,那么默认位置是:/data/db/,你应该看看那里。

【讨论】:

@user2384994 我的地址是/etc/mongod.conf 没有看到路径,但是/usr/bin/mongod -f /etc/mongod.conf。从配置中获取 dbpatch。 同时检查/usr/local/etc/mongod.conf(配置文件)和/usr/local/var/mongodb(数据库位置)。在某些系统上,这些将是默认设置。 那么这个应该为所有 mongodb 版本精确打印当前路径***.com/a/52036070/248616 db.serverCmdLineOpts()【参考方案3】:

只是在/var/db 中四处寻找它。不过感谢您的帮助——我相信这些答案适用于其他系统(例如 Ubuntu)并且会帮助其他人!

【讨论】:

【参考方案4】:

在较新版本的mongodb v2.6.4试试:

grep dbpath /etc/mongod.conf

它会给你这样的东西:

dbpath=/var/lib/mongodb

这就是它存储数据的地方。

【讨论】:

我的也在这里。对于想要查找此目录以检查文件大小的人:du -sh * | sort -hr【参考方案5】:

根据我的经验,默认位置是/var/lib/mongodb,然后

sudo apt-get install -y mongodb-org

【讨论】:

我可以为 Linux Mint 17.3 用户确认这一点。【参考方案6】:

我在 OSX 系统上找到了我的 /usr/local/var/mongodb

【讨论】:

这对于 Homebrew 用户来说是正确的 问题是“我怎样才能找到”mongodb数据存储位置。不仅仅是特定用户或平台的路径。【参考方案7】:

虽然此问题针对的是 Mongo 的 Linux/Unix 实例,但无论使用何种操作系统,它都是第一批搜索结果之一,因此对于发现此问题的未来 Windows 用户:

如果 MongoDB 以默认方式设置为 Windows 服务,您通常可以通过查看 MongoDB 服务属性中的“可执行文件路径”条目找到它:

【讨论】:

这不是很明显,但问题是针对 *nix os @st78 我知道,但它仍然是在 Windows 中搜索位置时的第一个 Google 结果之一,这就是为什么我留下了一个解决 Windows 路径的答案(一旦我弄清楚了)像我这样偶然发现它的人。【参考方案8】:

当您启动它时,它会显示给您。但我不知道这是否是您可以在主机上执行的操作。如果您可以访问命令行并且可以重新启动服务,您将获得如下信息:

    2016-11-15T12:57:09.182-0500 I CONTROL  [initandlisten]
 MongoDB starting : pid=16448 port=27017 dbpath=C:\data\db\ 

【讨论】:

【参考方案9】:

其实mongod实例存储数据的默认目录是

/data/db 在 Linux 和 OS X 上,

\data\db 在 Windows 上

要检查相同,您可以在 mongodb configuration file 中查找 dbPath 设置。

在 Linux 上,位置是 /etc/mongod.conf,如果您使用包管理器安装了 MongoDB。 运行以下命令检查指定目录:
grep dbpath /etc/mongodb.conf
在 Windows 上,位置是 <install directory>/bin/mongod.cfg。打开 mongod.cfg 文件并检查 dbPath 选项。 在 macOS 上,从 MongoDB 的官方 Homebrew tap 安装时,位置为 /usr/local/etc/mongod.conf

包管理器安装中包含的默认 mongod.conf 配置文件使用以下特定于平台的默认值 storage.dbPath

+--------------------------+-----------------+------------------------+
|         Platform         | Package Manager | Default storage.dbPath |
+--------------------------+-----------------+------------------------+
| RHEL / CentOS and Amazon | yum             | /var/lib/mongo         |
| SUSE                     | zypper          | /var/lib/mongo         |
| Ubuntu and Debian        | apt             | /var/lib/mongodb       |
| macOS                    | brew            | /usr/local/var/mongodb |
+--------------------------+-----------------+------------------------+

配置文件中的storage.dbPath设置仅适用于mongod

Linux 包初始化脚本不希望 storage.dbPath 更改默认值。如果您使用 Linux 软件包并更改 storage.dbPath,您将不得不使用自己的初始化脚本并禁用内置脚本。

Source

【讨论】:

其实这应该是最佳答案!默认dbPath 与预安装的mongod.cfg 配置文件中的dbPath 不同。很多人都不认识。【参考方案10】:

如果您能以某种方式找到 mongod.log 并对其执行 grep 操作

grep dbpath mongod.log

dbpath 的值是 mongodb 的数据位置!! 一切顺利:)

【讨论】:

【参考方案11】:

如果您可以连接到服务器,我发现db.serverCmdLineOpts() 是查找实际路径的最可靠方法。 “parsed.storage.dbPath”包含您的服务器当前使用的路径,并且在从配置或命令行参数中获取时都可用。

在我的情况下,确保配置值反映实际值也很重要(即,配置在上次重启后没有更改),此处提供的解决方案无法保证这一点。

db.serverCmdLineOpts()

示例输出:


    "argv" : [ 
        // --
    ],
    "parsed" : 
        "config" : "/your-config",
        "storage" : 
            "dbPath" : "/your/actual/db/path",
            // --
        
    ,
    "ok" : 1.0

【讨论】:

这看起来不错,但是有没有办法在 mongocxx 上做到这一点? @Dariusz,据我了解,它只是一个 C++ 驱动程序。您无法通过其本地客户端直接连接到 mongo 吗?【参考方案12】:

对于 windows 进入 MongoDB\Server\4.0\bin 文件夹并在任何文本编辑器中打开 mongod.cfg 文件。然后找到指定 dbPath 参数的行。这条线看起来很相似

dbPath: D:\Program Files\MongoDB\Server\4.0\data

【讨论】:

【参考方案13】:

在 MongoDB 4.4+ 和 CentOS 8 上,我通过运行找到了路径:

grep dbPath /etc/mongod.conf

【讨论】:

以上是关于我怎么知道 mongoDB 在哪里存储数据? (它不在默认的 /data/db 中!)的主要内容,如果未能解决你的问题,请参考以下文章

docker 将我的 MongoDB 数据存储在哪里?

nodejs:会话存储在哪里?啥是连接蒙戈?

1,MongoDB简介

python的websocket在哪里存储它接收到的数据

JWT 吊销信息在哪里存储,mongoDB 还是 Redis?

制作这个数组并存储在 mongodb 然后填充它