我怎么知道 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 中!)的主要内容,如果未能解决你的问题,请参考以下文章