有人能从stdin恢复mongodump吗?
我使用引用的命令生成了备份文件:
mongodump --archive > file
但是参考文献从未解释过档案的格式,或如何还原档案。有人说您必须从stdin中注入它,但是由于没有证据表明它实际上是可能的,因此他们仍然是个谜。
事实上,我进行了以下尝试,但均未成功:
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命令将该文件复制到主机,所以我使用所需空间的两倍(在将其移出容器之前)。
不幸的是,泊坞窗没有从主机上挂载,而且我(尚未)无法重新启动它以添加选项。我一直在寻找一个快速的选择。
答案 0 :(得分:0)
因此,根据MongoDB官方mongodump doc和mongorestore doc:
要将转储输出到标准输出流以便通过管道传输到另一个进程,请使用archive选项运行mongodump,但忽略文件名。 要从标准输入恢复,请使用--archive选项运行mongorestore,但忽略文件名。
因此实际上,您不必先进行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
祝你好运。