是否有人设法从stdin恢复mongodump?
我使用引用的命令生成了备份文件:
mongodump --archive > file
但是引用文献从未说明过文件的格式或如何还原文件。有人说您必须从stdin中注入(inject)它,但是由于没有证据表明它实际上是可能的,所以它们仍然是一个谜。
实际上,我进行了以下尝试,但均未成功:
cat file | mongorestore
mongorestore -vvvvv --archive < file
mongorestore -vvvvv --archive=file
所有这些命令最终都会出现相同的错误:
Failed: stream or file does not appear to be a mongodump archive
有关信息,我设法还原了以经典方式生成的存档。
为什么我需要使用--archive到stdout?
我的mongodb在docker内部。
我正在使用的选项现在在docker内部创建备份文件,然后使用docker cp命令将其复制到主机,因此我使用了所需空间的两倍(在将其删除到容器内部之前)。
不幸的是, docker 尚未从主机上挂载,并且我(尚未)无法重新启动它以添加选项。我一直在寻找一个快速的选择。
最佳答案
因此,根据MongoDB官方mongodump doc和mongorestore doc:
因此,实际上,您不必先mongodump归档然后再读取它,只需像下面这样简单地通过管道传递mongodump和mongorestore即可:
mongodump --archive | mongorestore --archive --drop
但是,您可能会像https://stackoverflow.com/a/56550768/3785901一样遇到另一个问题。
就我而言,我必须使用--nsFrom和--nsTo而不是--db,否则mongorestore无法按预期工作。因此,我成功执行到mongodump / mongorestore的最终命令是:
mongodump --host HOST:PORT --db SOURCE_DB --username USERNAME --password PASSWORD --archive | mongorestore --host HOST:PORT --nsFrom 'SOURCE_DB.*' --nsTo 'TARGET_DB.*' --username USERNAME --password PASSWORD --archive --drop
祝好运。
关于mongodb - 来自stdin的Mongorestore,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52478343/