gpt4 book ai didi

mongodb - 来自标准输入的 Mongorestore

转载 作者:行者123 更新时间:2023-12-02 19:30:00 24 4
gpt4 key购买 nike

有人成功地从 stdin 恢复了 mongodump 吗?

我使用引用命令生成了备份文件:

mongodump --archive > file

但引用文献从未解释存档的格式或恢复方式。有人说你必须从标准输入注入(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 to stdout?

我的 mongodb 在一个 docker 中。

我现在使用的选项是在 docker 内部 创建备份文件,我然后使用 docker cp 命令将其复制到主机,所以我 使用所需空间的两倍(在容器内移除之前)。

不幸的是,docker 没有从主机安装,我不能(还)重新启动它来添加选项。我正在寻找一个快速的选择。

最佳答案

所以根据MongoDB官方的mongodump doc和 mongorestore doc :

To output the dump to the standard output stream in order to pipe to another process, run mongodump with the archive option but omit the filename. To restore from the standard input, run mongorestore with the --archive option but omit the filename.

所以实际上你不必先 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 - 来自标准输入的 Mongorestore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52478343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com