Jeg spurgte denne samme spørgsmål på den officielle MongoDB-mailingliste . De sagde ikke at opgradere mere end 1 større version ad gangen. (Største versioner er:2.2, 2.4, 2.6, 3.0, 3.2, 3.4)
Jeg ønskede ikke at følge den normale opgraderingsproces med at installere hver version Bare for at starte mongod og derefter lukke den ned. Det føles for mig, som om det ville efterlade cruft, og jeg kan godt lide at få min infrastrukturbygning scriptet og versionsstyret. Så jeg besluttede at lancere nye EC2-instanser med den nyeste Ubuntu (da mine Mongo v2.4-servere også var 2 LTS-versioner bagefter) og den seneste MongoDB. Jeg brugte docker-billeder af mellemversioner af MongoDB til at udføre dataopgraderingerne.
Hovedparten af løsningen er denne:
# 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