Mongorestore到不同的数据库

Cyk*_*ker 40 mongodb mongorestore

在MongoDB中,是否可以转储数据库并将内容还原到其他数据库?例如这样:

mongodump --db db1 --out dumpdir
mongorestore --db db2 --dir dumpdir
Run Code Online (Sandbox Code Playgroud)

但它不起作用.这是错误消息:

构建要从dumpdir目录恢复的集合列表

不知道如何处理子目录"dumpdir/db1",跳过...

DONE

Bla*_*ven 86

您需要实际指向上一个转储的输出目录中的"数据库名称"容器目录"内":

mongorestore -d db2 dumpdir/db1
Run Code Online (Sandbox Code Playgroud)

并且通常只有<path>可以作为位置参数,而不是-dir只有在"不在位置"时才需要,即"在参数列表的中间".

ps对于存档备份文件(使用mongorestore v3.4.10 测试)

mongorestore --gzip --archive=${BACKUP_FILE_GZ} --nsFrom "${DB_NAME}.*" --nsTo "${DB_NAME_RESTORE}.*"
Run Code Online (Sandbox Code Playgroud)

  • @Philiiiiiipp看起来现在支持了.说实话--nsInclude --nsExclude --nsFrom和--nsTo看起来过于复杂.我使用--archive和--gzip完成备份,我想在另一个数据库中恢复此备份.我怎样才能做到这一点?我想我需要nsFrom和nsTo但不需要nsInclude和nsExclude因为我不想要排除某些东西.应该还原整个备份,只更改数据库的名称. (6认同)
  • 你能建议存档转储的解决方案(--gzip --archive)吗? (3认同)
  • 谢谢你!这有效。我认为在使用“-d”选项时必须指定转储文件夹中的子目录,在不使用“-d”时必须指定转储文件夹本身。就是这样。 (2认同)

Mos*_*ari 21

mongodump --db=DB_NAME --out=/path-to-dump
mongorestore --nsFrom "DB_NAME.*" --nsTo "NEW_DB_NAME.*" /path-to-dump
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码可以回答问题,但提供有关如何和/或为何解决问题的附加上下文将提高​​答案的长期价值。 (3认同)

use*_*520 8

除了布莱克斯七的答案之外,如果您的数据库使用身份验证,我可以使用该选项来实现此--uri功能,这需要最新的 mongo 版本(> 3.4.6):

mongodump --uri="mongodb://$sourceUser:$sourcePwd@$sourceHost/$sourceDb" --gzip --archive | mongorestore --uri="mongodb://$targetUser:$targetPwd@$targetHost/$targetDb" --nsFrom="$sourceDb.*" --nsTo="$targetDb.*" --gzip --archive
Run Code Online (Sandbox Code Playgroud)


Gre*_*reg 6

谢谢你!@布莱克七号

添加 Docker 注释:容器名称可与容器 ID 互换

(假设已通过身份验证,假设命名容器=my_db 和 new_db)

倾倒:

docker exec -it my_db bash -c "mongodump --uri mongodb://db:password@localhost:27017/my_db --archive --gzip | cat > /tmp/backup.gz"
Run Code Online (Sandbox Code Playgroud)

复制到工作站:

docker cp my_db:/tmp/backup.gz c:\backups\backup.gz
Run Code Online (Sandbox Code Playgroud)

复制到新容器(表单备份文件夹):

docker cp .\backup.gz new_db:/tmp
Run Code Online (Sandbox Code Playgroud)

从容器 tmp 文件夹恢复:

docker exec -it new_db bash -c "mongorestore --uri mongodb://db:password@localhost:27017/new_db --nsFrom 'my_db.*' --nsTo 'new_db.*' --gzip --archive=/tmp/backup.gz"
Run Code Online (Sandbox Code Playgroud)