【发布时间】: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