中止db.repairDatabase()后MongoDB是否被锁定?怎么解锁?

时间:2016-06-10 13:46:44

标签: mongodb

我尝试在健康但很大的MongoDB数据库上从mongo shell执行db.repairDatabase()命令。它运行了大约10个小时仍然没有完成。无论好坏,我按Ctrl-C取消它。

似乎群集已处于某种锁定状态。像“show dbs”这样的命令都会因“超时操作”而失败:

mongos> show dbs
2016-06-10T09:38:10.179-0400 E QUERY    [thread1] Error: listDatabases failed:{ "code" : 50, "ok" : 0, "errmsg" : "Operation timed out" } :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:760:19
shellHelper@src/mongo/shell/utils.js:650:15
@(shellhelp2):1:1

在我杀死db.repairDatabase()之后,现在又持续了大约10个小时。

从中恢复的正确方法是什么?

我的群集信息:我到处运行MongoDB 3.2.5。我有3个配置服务器,11个分片,每个分片是由2个节点和仲裁器组成的副本集。我有大约40个节点运行mongos实例。 3个配置服务器仍然是3.0风格(尚未升级到副本集)。

1 个答案:

答案 0 :(得分:1)

对于它的价值,我能够将群集恢复如下:

  1. 重新启动所有mongos服务。
  2. 重新启动所有mongod arbiters。
  3. 为所有3个配置服务器重新启动mongod。
  4. 从我的11个分片中重新启动mongod 1个节点'副本集。
  5. 从我的11个分片中的每一个中重新启动了另一个节点的mongod'副本集。
  6. 第1步到第4步没有解决任何问题。

    但在我执行第5步之后,我又能够再次使用所有数据库。事情似乎现在恢复正常。