【问题标题】:Mongodb IndexBuildRetry keep rebooting server (noIndexBuildRetry)Mongodb IndexBuildRetry 不断重启服务器(noIndexBuildRetry)
【发布时间】:2020-12-16 15:32:56
【问题描述】:

我有一个由于唯一索引问题而拒绝重新启动的 mongo DB。由于数据库没有启动,它卡在这个重启循环中,我无法连接到它来删除索引(或清理有问题的数据)。

我很乐意解决唯一键/索引问题,但无法使用像 db.coll.dropIndexes() 这样的命令。解决此问题的最佳方法是什么?

选项 1 - 从 docker 文件系统中删除索引

还有其他方法可以直接从文件系统中删除索引吗? (我可以连接到 docker 几秒钟以运行命令)。

选项 2 - 使用 dokku 设置 noIndexBuildRetry 标志

我正在使用 Dokku,它似乎没有提供一种简单的方法来将建议的 --noIndexBuildRetry 标志传递给 mongod 进程。

This article 提到了/etc/init.d/mongod 配置文件,但它在我的 docker 映像中不存在。如何在 Dokku 基础架构中设置此标记?

选项 3

更新到 mongo 4.x。它似乎以不同的方式处理索引,并且可能对我的重复键更宽容(并且不会阻止服务器启动)。

Mongo 服务器日志:

2020-12-16T14:12:00.159+0000 E INDEX    [initandlisten] Index rebuilding did not complete: DuplicateKey: E11000 duplicate key error collection: db1.Events index: ns_1_hash_1 dup key: { : "userhash", : null }
2020-12-16T14:12:00.159+0000 I INDEX    [initandlisten] note: restart the server with --noIndexBuildRetry to skip index rebuilds
2020-12-16T14:12:00.160+0000 F -        [initandlisten] Fatal Assertion 26100 at src/mongo/db/index_rebuilder.cpp 136

【问题讨论】:

    标签: mongodb docker dokku mongodb-indexes


    【解决方案1】:

    使用docker run 在容器中运行 shell(例如 bash),而不是使用默认入口点,我假设它会启动 mongod/mongos 的某种组合。进入 shell 后,使用您喜欢的任何选项手动启动数据库。

    【讨论】:

    • 这也可以真正帮助解决问题!没想到。谢谢!
    【解决方案2】:

    可以使用MONGO_CONFIG_OPTIONS 文件自定义dokku-mongo 中的mongod 标志。到目前为止,您需要在编辑此文件后重新启动容器(而不仅仅是服务)。

    【讨论】:

      【解决方案3】:

      如果你使用 centos,你必须检查 mongodb 的 systemd conf。在那你必须改变“选项”行。在该行的末尾添加“--noIndexBuildRetry”,如下所示,

      Environment="OPTIONS=-f /etc/mongod.conf --noIndexBuildRetry"

      然后重新加载你的systemctl,

      sytemctl daemon-reload

      然后重启你的mongodb,

      systemctl 重启 mongodb

      【讨论】:

        猜你喜欢
        • 2017-12-04
        • 2014-01-21
        • 1970-01-01
        • 1970-01-01
        • 2021-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-15
        相关资源
        最近更新 更多