将旧版mongo的数据库转储还原到新版本的mongo

时间:2016-06-15 11:02:03

标签: mongodb database-backups mongodump mongorestore

目前,我有一个旧版本的mongo,即在我的系统上运行2.6。我已经将我的网站投入生产并拥有大量客户数据。我计划升级到mongo 3.2。

所以,我的问题是mongo v3.2 的mongorestore是否适用于 v2.6 的数据转储?或者,它是否会产生问题?

任何答案都是无价的!谢谢

2 个答案:

答案 0 :(得分:14)

我问过same question on the official MongoDB mailing list。他们说不要一次升级超过1个主要版本。 (主要版本为:2.2,2.4,2.6,3.0,3.2,3.4)

我不想按照安装每个版本的正常升级过程来启动mongod然后关闭它。这对我来说就像它会留下瑕疵,我喜欢让我的基础设施建立脚本和版本控制。因此,我决定使用最新的Ubuntu启动新的EC2实例(因为我的Mongo v2.4服务器也支持2个LTS版本)和最新的MongoDB。我使用了MongoDB中间版本的docker镜像来进行数据升级。

https://gist.github.com/RichardBronosky/2d04c7c2e9a5bea67cd9760a35415a3f#file-uat_mongodb_upgrade_from_prod-sh

解决方案的大部分内容如下:

# mongo.conf is using the default dbPath: /var/lib/mongodb
# this path is for temporary use by the mongo docker container
mkdir -p /data/db/dump
# see: https://hub.docker.com/_/mongo/ (search for /data/db)
# see: https://github.com/docker-library/mongo/blob/30d09dbd6343d3cbd1bbea2d6afde49f5d9a9295/3.4/Dockerfile#L59
cd /data/db
mongodump -h prodmongo.int

# Get major versions from https://hub.docker.com/r/library/mongo/tags/
step=0
for major_version in 2.6.12 3.0.14 3.2.11 3.4.1; do
    sudo docker stop some-mongo || true
    sudo docker rm   some-mongo || true
    sudo docker run --name some-mongo -v /data/db:/data/db -d mongo:$major_version
    false; while [[ $? > 0 ]]; do
        sleep 0.5
        sudo docker exec -it some-mongo mongo --eval 'printjson((new Mongo()).getDBNames())'
    done
    if (( $step == 0 )); then
        sudo docker exec -it some-mongo mongorestore /data/db/dump
    fi
    ((step += 1))
done

# Finish up with docker
sudo rm -rf /data/db/dump/*
sudo docker exec -it some-mongo bash -c 'cd /data/db; mongodump'
sudo docker stop some-mongo
sudo docker rm   some-mongo

# Load upgraded data into latest version of MongoDB (WiredTiger storage engine will be used)
mongorestore /data/db/dump
sudo rm -rf /data

答案 1 :(得分:6)

由于您拥有来自mongo 2.6的数据,因此已满足索引字段限制。 Mongo 3.2将毫无问题地恢复此备份。

另一种升级数据库的方法(如果你有副本集)是用3.2替换一个2.6成员并等待同步,然后是另一个...这将为你提供业务连续性: - )