恢复具有不同名称的mongodb数据库

时间:2019-02-11 12:20:37

标签: mongodb mongorestore

我一直在对mongodb实例进行定期(每24小时)备份。这很好用,我可以在我的登台服务器上毫无问题地还原它们:

time mongorestore  --ssl --gzip --authenticationDatabase=admin \
    --host=fra-mongo-staging-1.example.com --port=27017        \
    --username=restore --password=secret --archive="$snapshot_name"

但是生产中的dbname是example_prod,而在登台服务器上,我想恢复到example_staging。所以我输入:

time mongorestore  --ssl --gzip --db "$dbname" --authenticationDatabase=admin \
    --host=fra-mongo-staging-1.example.com --port=27017                       \
    --username=restore --password=secret --archive="$snapshot_name"

唯一的区别是--db“ $ dbname”(其中$ dbname是example_staging)。这行不通:我看到有关准备工作的内容,然后说完成了,但是什么也没恢复。

2019-02-07T11:16:36.743+0000    the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead
2019-02-07T11:16:36.772+0000    archive prelude example_prod.surveys
2019-02-07T11:16:36.773+0000    archive prelude example_prod.settings
2019-02-07T11:16:36.773+0000    archive prelude example_prod.spines
2019-02-07T11:16:36.773+0000    archive prelude example_prod.reduced_authors
2019-02-07T11:16:36.773+0000    archive prelude example_prod.delayed_backend_mongoid_jobs
2019-02-07T11:16:36.773+0000    archive prelude example_prod.email_events
2019-02-07T11:16:36.773+0000    archive prelude example_prod.authors
2019-02-07T11:16:36.774+0000    archive prelude example_prod.crowberry
2019-02-07T11:16:36.774+0000    archive prelude example_prod.bitly
2019-02-07T11:16:36.774+0000    archive prelude example_prod.mytestcollection
2019-02-07T11:16:36.774+0000    archive prelude example_prod.reviews
2019-02-07T11:16:36.774+0000    archive prelude example_prod.books
2019-02-07T11:16:36.774+0000    archive prelude example_prod.candy_events
2019-02-07T11:16:36.774+0000    archive prelude example_prod.features
2019-02-07T11:16:36.774+0000    archive prelude example_prod.elderberry
2019-02-07T11:16:36.776+0000    preparing collections to restore from
2019-02-07T11:17:02.403+0000    done

我也尝试过使用--tsFrom=example_prod --tsTo=example_staging,很不高兴。

关于正确方法的任何建议吗?

2 个答案:

答案 0 :(得分:1)

  

我也尝试过使用--tsFrom = example_prod --tsTo = example_staging,

在mongorestore文档中看不到tsFrom和tsTo -您使用的是哪个版本? https://docs.mongodb.com/manual/reference/program/mongorestore/

似乎有nsFromnsTo选项采用了名称空间,因此执行--nsFrom='example_prod.*'--nsTo=example_staging.*应该可以。

从文档中

  

对于简单替换,请使用星号(*)作为通配符。用反斜杠转义所有文字星号和反斜杠。替换与匹配成线性关系:--nsFrom中的每个星号必须与--nsTo中的一个星号相对应,并且–nsFrom中的第一个星号与nsTo中的第一个星号匹配。

答案 1 :(得分:1)

另一种方法是转储数据库,重命名文件夹并使用新名称导入。

EG,

mongodump --out=tempBackup
mv tempBackup/oldDbName tempBackup/newDbName
mongorestore --nsInclude= newDbName tempBackup

没有--nsInlnclude 我没有尝试过。