根据这个:https://docs.mongodb.com/manual/administration/analyzing-mongodb-performance/#database-profiling,每个副本集都有一个不同的system.profile集合。我正在尝试使用以下方法从其中一个副本中删除system.profile
集合:
> rs.slaveOk()
> db.setProfilingLevel(0)
> db.system.profile.drop()
2016-10-12T06:42:29.187+0000 E QUERY [thread1] Error: drop failed: { "ok" : 0, "errmsg" : "not master", "code" : 10107 } :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DBCollection.prototype.drop@src/mongo/shell/collection.js:739:1
@(shell):1:1
我不确定这里有什么问题。
答案 0 :(得分:2)
drop命令失败,因为节点未处于“Primary”状态。 drop collection命令是写操作;只允许在主节点上执行写操作。
删除“system.profile”集合的最简单方法是将集合放在主节点上。 drop命令将被复制到其他节点; drop命令的条目可以在oplog中看到:
$ db.oplog.rs.find()
....
{ "ts" : Timestamp(1477445036, 1), "h" : NumberLong("1583532073473005081"), "v" : 2, "op" : "c", "ns" : "stack.$cmd", "o" : { "drop" : "system.profile" } }
您可能遇到的问题可能是执行drop命令时在辅助节点上启用了性能分析的结果。
如果您尝试删除启用了性能分析的“system.profile”命令,则drop命令将失败并显示错误:
$ db.system.profile.drop()
2016-10-25T18:28:43.030-0700 E QUERY Error: drop failed: {
"ns" : "stack.system.profile",
"nIndexesWas" : 0,
"ok" : 0,
"errmsg" : "turn off profiling before dropping system.profile collection",
"code" : 20
}
at Error (<anonymous>)
at DBCollection.drop (src/mongo/shell/collection.js:620:15)
at (shell):1:19 at src/mongo/shell/collection.js:620
可以在主节点上禁用分析,允许执行drop命令。但是,如果仍在辅助节点上启用了分析,则drop命令的复制将失败,并且该集合仍将存在。来自mongodb.log文件:
2016-10-25T17:46:02.123-0700 W REPL [repl writer worker 15] repl Failed command { drop: "system.profile" } on stack with status IllegalOperation turn off profiling before dropping system.profile collection during oplog application
这将导致一种奇怪的状态,因为该集合不会存在于主节点上,但会存在于辅助节点上。禁用辅助节点上的分析并尝试再次删除该命令不会删除该集合;不存在的集合上的drop命令本质上是一个no-op,它不会创建一个oplog条目而不能被复制。
需要在主节点上创建一个新的“system.profile”集合,然后可以将其删除,从而允许在其他节点上复制和删除该命令:
2016-10-25T18:18:18.093-0700 I COMMAND [repl writer worker 15] CMD: drop stack.system.profile
有问题的节点是否符合主要条件?您可能需要考虑启动故障转移并将节点提升为主状态。这将简化删除此集合的过程。
Marco也是正确的:在独立状态下重新启动相关节点也可以删除集合。然后可以将节点重新插入到副本集中。
答案 1 :(得分:0)
我不确定,但是如果您需要在副本集中的辅助节点上执行一些通用维护操作,请查看文档:
这些是更改辅助(link to documentation)上system.profile
集合大小所需的步骤,因此我假设删除相同的集合应遵循相同的说明。