sql >> Database teknologi >  >> NoSQL >> MongoDB

Gendannelse af databasedumpen af ​​en ældre version af mongo til en ny version af mongo

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.

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

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


  1. Sådan konverteres et kommasepareret strengfelt til array i mongodb

  2. MongoDB opdatering indlejret array

  3. Java:Hvordan indsætter man et hashmap i MongoDB?

  4. Mongoose find en og skub til rækken af ​​dokumenter