73

在 MongoDB 中,是否可以转储数据库并将内容恢复到不同的数据库?例如像这样:

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

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

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

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

完毕

4

5 回答 5

148

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

mongorestore -d db2 dumpdir/db1

通常只是 <path> 可以作为位置参数,而不是-dir仅在“不在位置”时才需要,即“在参数列表的中间”。

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

mongorestore --gzip --archive=${BACKUP_FILE_GZ} --nsFrom "${DB_NAME}.*" --nsTo "${DB_NAME_RESTORE}.*"
于 2016-03-31T00:20:26.293 回答
9
mongodump --db=DB_NAME --out=/path-to-dump
mongorestore --nsFrom "DB_NAME.*" --nsTo "NEW_DB_NAME.*" /path-to-dump
于 2020-12-07T08:38:07.273 回答
5

除了 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
于 2019-10-14T14:51:25.950 回答
3

谢谢!@布莱克斯七

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

(假设已通过身份验证,假设命名为 container=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"
于 2020-02-08T19:31:06.253 回答
0

您可以使用其他名称恢复数据库。语法是:

mongorestore --port 27017 -u="username" -p="password" 
    --nsFrom "dbname.*" 
    --nsTo "new_dbname.*" 
    --authenticationDatabase admin /backup_path 
于 2022-02-24T12:05:41.967 回答