我正在升级到 3.0,但在升级时遇到了一些问题。具体来说,我试图启动时得到一个错误mongod
通过ssh
,它试图使用默认的dbpath
,而不是我在新YAML配置文件中指定的一个。我继续并重新启动了机器,现在mongod
又开始运行了。在这一点上我有点偏执,想知道是否有办法确保存储引擎wiredtiger
来自 shell。
在 mongoDB3 中出现了一个新的存储引擎:WiredTiger。然而,MMAPv1仍然是 Mongo 的默认选择。
一个可能并不比另一个更好,这通常是用例和为工作选择正确工具的问题。但是哪种发动机适合什么工作?
事实上,虽然 MMAPv1 是默认引擎,但WiredTiger 似乎在几乎所有领域都更好。它具有与 MMAPv1 相同的功能以及:
我在MongoDB 的博客上找到了一个比较表:
所以除非你在 Solaris 上,否则有理由不选择 WiredTiger 吗?
编辑
这里有两个视频详细解释了WiredTiger和MMAPv1的内部 结构。
我在 MongoDB shell 版本中使用以下命令(Windows 机器):3.0.7:
mongod --config "G:\NodeApps\mongod.cfg" --install
Run Code Online (Sandbox Code Playgroud)
mongod.cfg 文件内容如下:
systemLog:
destination: file
path:"G:\NodeApps\data\log"
storage:
dbPath:"G:\NodeApps\data"
Run Code Online (Sandbox Code Playgroud)
得到以下错误:
Error parsing YAML config file: yaml-cpp: error at line 4, column 8: illegal map value
try 'mongod --help' for more information
Run Code Online (Sandbox Code Playgroud)
类似的问题没有解决方案。
我已经尝试过的:
请帮我解决一下这个。
我正在使用 MongoDB 3.0.0 版。我正在尝试在我们的机器上设置 mongodb 复制。最初设置了复制,但由于 VM 上的一些更改,整个过程崩溃了。当我再次尝试设置时,辅助节点和仲裁器卡在启动模式中。
在我设置的 mongoDB conf 文件中
replSet=ReplicaSet1
Run Code Online (Sandbox Code Playgroud)
我使用命令添加了 2 台机器
rs.add("10.235.96.12:27017")
rs.add("10.235.96.12:27017")
Run Code Online (Sandbox Code Playgroud)
但是在这之后,当我做一个rs.status()
次要和仲裁者时,仍然在 StartUp 中显示
ReplicaSet1:PRIMARY> rs.status()
{
"set" : "ReplicaSet1",
"date" : ISODate("2015-07-31T04:45:57.260Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "BOSPROD9:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 63104,
"optime" : Timestamp(1438257913, 1),
"optimeDate" : ISODate("2015-07-30T12:05:13Z"),
"electionTime" : Timestamp(1438254975, 2),
"electionDate" : ISODate("2015-07-30T11:16:15Z"),
"configVersion" : 7,
"self" : true
},
{
"_id" …
Run Code Online (Sandbox Code Playgroud) 我在 Debian linux 中启动 Mongod v3.0.15 时出错。我/etc/mongod.conf
通过添加 mmapv1: smallFiles: true
存储选项将文件更改为使用 smallFiles 。
我现在在执行时收到以下错误$mongod --config /etc/mongod.conf
:
ib1:/ 514 $ mongod --config /etc/mongod.conf
2017-10-03T12:14:21.183-0500 F CONTROL 全局初始化失败:FileNotOpen 无法打开“/var/log/mongodb/mongod.log”
该mongod.log
文件存在,并且它也在mongod.conf
文件中定义为在该目录中。
我可以在 shell 中自己打开 /var/log/mongodb/mongod.log 文件。奇怪的是,它已经很长时间(几个月)没有被写入了。
有任何想法吗?
非常感谢,凯伦
你能从 linux bash 终端列出 MongoDB 中的所有数据库吗?我找不到正确的命令。我试图列出所有内容,以便我可以编写一个 bash 脚本来单独备份所有数据库。有没有更好的办法?
如何查询 MongoDB 中集合压缩的设置?我将 WiredTiger 配置为存储引擎,并将 zlib 算法配置为集合压缩。
这是我的配置 YAML 文件的片段:
storage:
dbPath: "/data/wiredTiger"
engine: "wiredTiger"
wiredTiger:
collectionConfig:
blockCompressor: "zlib"
Run Code Online (Sandbox Code Playgroud)
使用 mongo 版本 3.0.5。
请任何帮助
我有一个小部件集合,其中包含这样的记录:
{ "_id" : ObjectId("55a6abe193819c033d4d755a"), "name" : "widget1"}
{ "_id" : ObjectId("55a6abe193819c033d4d755a"), "name" : "widget2", "loc" : ObjectId("55a69475da314d9984fc6201") }
Run Code Online (Sandbox Code Playgroud)
我还有一个位置集合,如下所示:
{ "_id" : ObjectId("55a69475da314d9984fc6201"), "abbrev" : "CAN", "description" : "Canada" }
{ "_id" : ObjectId("55a6948eda314d9984fc6202"), "abbrev" : "USA", "description" : "United States" }
{ "_id" : ObjectId("55a69496da314d9984fc6203"), "abbrev" : "MEX", "description" : "Mexico" }
Run Code Online (Sandbox Code Playgroud)
如果我想使用 Objectid 查找位于加拿大的所有小部件,我知道我可以这样做:
> db.widgets.find( { loc: ObjectId("55a69475da314d9984fc6201")})
{ "_id" : ObjectId("55a6abe193819c033d4d755a"), "name" : "widget2", "loc" : ObjectId("55a69475da314d9984fc6201") }
Run Code Online (Sandbox Code Playgroud)
但是,如果我想不使用 objectid 而使用缩写或描述来搜索位置怎么办?我该怎么做?
这里有这个问题:
但这不是我要找的答案。
下面有一个问题,这可能是相关的,但不一样。
这个问题几乎是重复的,但涉及 2.6.11 版,我的是 3.0 版和 3.2 版。另外,除非我需要,否则我不想使用force : 1。
我一直在努力将答案中描述的大多数内容付诸实践,也许有一个例子或澄清,因此是这个问题。
我的复制工作正常,3 个节点,node1 是主节点。
当我运行以下命令时
//-----------------------------
//check the status of the replication
//-----------------------------
rs.status()
Run Code Online (Sandbox Code Playgroud)
我得到这个结果:
{
"set" : "Krishna",
"date" : ISODate("2016-04-26T14:59:40.263Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "jpb01275:37001",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1022,
"optime" : Timestamp(1461678841, 1),
"optimeDate" : ISODate("2016-04-26T13:54:01Z"),
"electionTime" : Timestamp(1461682464, …
Run Code Online (Sandbox Code Playgroud) 如何从 MongoDB 客户端内执行 shell (bash) 命令?
使用 MySQL 客户端:
system (!) 执行系统 shell 命令。
MongoDB 有类似的东西吗?
我正在使用 db.currentOp() 检查 Mongodb 中的当前连接。如何获得所有记录的总数以及如何在一列中获得所有“客户端”IP?谢谢
db.currentOp()
{
"inprog" : [
{
"desc" : "WT RecordStoreThread: local.oplog.rs",
"threadId" : "1068",
"active" : true,
"opid" : 77300,
"secs_running" : 712,
"microsecs_running" : NumberLong(712734301),
"op" : "none",
"ns" : "local.oplog.rs",
"query" : {
},
"numYields" : 0,
"locks" : {
},
"waitingForLock" : false,
"lockStats" : {
"Global" : {
"acquireCount" : {
"r" : NumberLong(1),
"w" : NumberLong(1)
}
},
"Database" : {
"acquireCount" : {
"w" : NumberLong(1)
}
},
"oplog" …
Run Code Online (Sandbox Code Playgroud) 我是 MongoDB 的新手(使用 mongo 3.05)- 并且看到了我不太了解或找不到答案的行为-当我在 mongo 环境中显示 DB 时 = 我看到了一个数据库列表,它们全部取一些固定大小 - 有些大约 72MB,有些大约 210MB - 就是这样。
当我导出数据库进行备份时 - 我总共有大约 40MB 的所有数据库。
我想更好地理解这一点,有人熟悉这种行为吗?谢谢!