Mongorestore到不同的数据库

时间:2016-03-31 00:00:55

标签: mongodb mongorestore

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

mongodump --db db1 --out dumpdir
mongorestore --db db2 --dir dumpdir

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

  

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

     

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

     

完成

4 个答案:

答案 0 :(得分:72)

你需要实际指向"database name" container目录"在"上一个转储的输出目录:

mongorestore -d db2 dumpdir/db1

通常只是< path>作为一个位置参数,而不是-dir,只有在"位置"即#"在参数列表的中间"。

P.S。对于存档备份文件(tested与mongorestore v3.4.10)

mongorestore --gzip --archive=${BACKUP_FILE_GZ} --nsFrom "${DB_NAME}.*" --nsTo "${DB_NAME_RESTORE}.*"

答案 1 :(得分:1)

谢谢! @布雷克七世

添加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"

复制到工作站:

docker cp my_db:/tmp/backup.gz c:\backups\backup.gz

复制到新容器(窗体备份文件夹):

docker cp .\backup.gz new_db:/tmp

从容器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"

答案 2 :(得分:0)

除了Blakes Seven的答案之外,如果您的数据库使用身份验证,那么我可以使用--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

答案 3 :(得分:0)

mongodump --db=DB_NAME --out=/path-to-dump
mongorestore --nsFrom "DB_NAME.*" --nsTo "NEW_DB_NAME.*" /path-to-dump