【问题标题】:MongoDB locked after aborted db.repairDatabase()? How to unlock?MongoDB 在中止 db.repairDatabase() 后被锁定?如何解锁?
【发布时间】:2016-06-11 02:38:36
【问题描述】:

我尝试在健康但大型 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 风格(尚未升级到副本集)。

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    不管怎样,我能够按如下方式恢复集群:

    1. 重新启动所有 mongos 服务。
    2. 重新启动所有 mongod arbiters。
    3. 为所有 3 个配置服务器重新启动 mongod。
    4. 从我的 11 个分片的副本集中为每个节点重新启动 mongod。
    5. 从我的 11 个分片的副本集中为另外 1 个节点重新启动 mongod。

    步骤 1 到 4 没有解决任何问题。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多