Mongorestore 到不同的数据库
Mongorestore to a different database
在MongoDB中,是否可以转储数据库并将内容恢复到不同的数据库?例如像这样:
mongodump --db db1 --out dumpdir
mongorestore --db db2 --dir dumpdir
但是没用。这是错误消息:
building a list of collections to restore from dumpdir dir
don't know what to do with subdirectory "dumpdir/db1", skipping...
done
您需要实际指向 "database name" container 目录 "within" 先前转储的输出目录:
mongorestore -d db2 dumpdir/db1
通常只是 作为位置参数就可以了,而不是与 -dir
一起使用,后者仅在 "out of position" 时才需要,即 "in the middle of the arguments list".
p.s。对于归档备份文件(tested with mongorestore v3.4.10)
mongorestore --gzip --archive=${BACKUP_FILE_GZ} --nsFrom "${DB_NAME}.*" --nsTo "${DB_NAME_RESTORE}.*"
除了 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
谢谢! @布雷克七
添加 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"
mongodump --db=DB_NAME --out=/path-to-dump
mongorestore --nsFrom "DB_NAME.*" --nsTo "NEW_DB_NAME.*" /path-to-dump
您可以使用其他名称恢复数据库。语法是:
mongorestore --port 27017 -u="username" -p="password"
--nsFrom "dbname.*"
--nsTo "new_dbname.*"
--authenticationDatabase admin /backup_path
在MongoDB中,是否可以转储数据库并将内容恢复到不同的数据库?例如像这样:
mongodump --db db1 --out dumpdir
mongorestore --db db2 --dir dumpdir
但是没用。这是错误消息:
building a list of collections to restore from dumpdir dir
don't know what to do with subdirectory "dumpdir/db1", skipping...
done
您需要实际指向 "database name" container 目录 "within" 先前转储的输出目录:
mongorestore -d db2 dumpdir/db1
通常只是 -dir
一起使用,后者仅在 "out of position" 时才需要,即 "in the middle of the arguments list".
p.s。对于归档备份文件(tested with mongorestore v3.4.10)
mongorestore --gzip --archive=${BACKUP_FILE_GZ} --nsFrom "${DB_NAME}.*" --nsTo "${DB_NAME_RESTORE}.*"
除了 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
谢谢! @布雷克七
添加 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"
mongodump --db=DB_NAME --out=/path-to-dump
mongorestore --nsFrom "DB_NAME.*" --nsTo "NEW_DB_NAME.*" /path-to-dump
您可以使用其他名称恢复数据库。语法是:
mongorestore --port 27017 -u="username" -p="password"
--nsFrom "dbname.*"
--nsTo "new_dbname.*"
--authenticationDatabase admin /backup_path