Bib*_*elo 2 mongodb mongorestore mongodump docker
有人曾经设法从标准输入恢复 mongodump 吗?
我使用引用的命令生成了备份文件:
mongodump --archive > file
Run Code Online (Sandbox Code Playgroud)
但该参考资料从未解释存档的格式,或如何恢复它。有人说你必须从 stdin 注入它,但他们仍然是个谜,因为没有证据表明它实际上是可能的。
事实上,我做了以下尝试,但没有成功:
cat file | mongorestore
mongorestore -vvvvv --archive < file
mongorestore -vvvvv --archive=file
Run Code Online (Sandbox Code Playgroud)
所有这些命令最终都会出现相同的错误:
Failed: stream or file does not appear to be a mongodump archive
Run Code Online (Sandbox Code Playgroud)
有关信息,我设法恢复了以经典方式生成的存档。
为什么我需要使用 --archive 到标准输出?
我的 mongodb 在 docker 里面。
我现在使用的选项在 docker内创建备份文件,然后我使用 docker cp 命令将其复制到主机,因此我使用了所需空间的两倍(在它被删除到容器内之前)。
不幸的是,docker 没有来自主机的挂载,我无法(还)重新启动它以添加选项。我正在寻找一个快速的选择。
小智 6
所以根据 MongoDB 官方 mongodump doc和 mongorestore doc:
要将转储输出到标准输出流以便通过管道传输到另一个进程,请使用存档选项运行 mongodump 但省略文件名。要从标准输入恢复,请使用 --archive 选项运行 mongorestore 但省略文件名。
所以实际上你不必先 mongodump 到文件然后从中读取,只需简单地管道 mongodump 和 mongorestore 像这样:
mongodump --archive | mongorestore --archive --drop
Run Code Online (Sandbox Code Playgroud)
但是,您可能会像我一样遇到另一个问题/sf/answers/3958553791/。
就我而言,我必须使用 --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
Run Code Online (Sandbox Code Playgroud)
祝你好运。
| 归档时间: |
|
| 查看次数: |
2100 次 |
| 最近记录: |