背景
我有一个目录,其中包含运行 MongoDB 3.4.x 的 mongod 上.gz
生成的文件,我正在使用. 除了一个之外,所有的都被正确加载。它们都需要 1 到 3 个小时来加载数据,然后再花费 2 到 4 个小时来重建索引。有问题的文件在下面的步骤之前挂起,我通常在大约一天后从外部终止该进程。我已经将场景重现了 4 或 5 次。mongodump
mongorestore ... --numInsertionWorkersPerCollection 8 --drop --nsFrom ... --nsTo ...
finished restoring database.collection (N documents)
在这段时间内,该mongorestore
进程仍然可以从 shell 中看到,但在 中没有相应的条目db.currentOp()
,并且数据库的大小没有增加。
这些错误是在日志行“从元数据恢复集合数据库的索引。集合”之前返回的:
2017-03-13T09:30:04.218-0400 demux namespaceHeader: {database collection true 726142452659775357}
2017-03-13T09:30:04.218-0400 demux checksum for namespace database.collection is correct (726142452659775357), 54599167880 bytes
2017-03-13T09:30:04.218-0400 demux finishing (err:corruption found in archive; I/O error reading length or terminator ( gzip: invalid header ))
我发现了一些关于 mongorestore 挂起的报告(例如),以及一些关于/
旧版本命名空间中 s 问题的文档(例如),但是我还没有找到关于我的情况的描述。
问题
现在我发现自己有一些迹象表明我加载的文件可能已损坏,或者至少有一个损坏的标题。向相关集合及其索引发出实际查询会返回看起来合理的结果。我怎样才能明确地检测或排除这种类型的“腐败”?在这种情况下,“腐败”究竟意味着什么?我可以期望在数据库中找到它,还是只能在 zip 文件中找到它?
更新:在@mustaccio 的建议下,我运行gzip -t
了有问题的文件,它报告了“尾随垃圾”。这是否足以将 MongoDB 报告的问题固定在错误的输入上并停止在数据库中查找损坏?