sql >> Database >  >> NoSQL >> MongoDB

De databasedump van een oudere versie van mongo herstellen naar een nieuwe versie van mongo

Ik vroeg dit dezelfde vraag op de officiële MongoDB-mailinglijst . Ze zeiden dat ze niet meer dan 1 hoofdversie tegelijk moesten upgraden. (Belangrijke versies zijn:2.2, 2.4, 2.6, 3.0, 3.2, 3.4)

Ik wilde niet het normale upgradeproces volgen om elke versie te installeren, gewoon om Mongod te starten en vervolgens af te sluiten. Dat voelt voor mij alsof het rommel achterlaat en ik wil graag dat mijn infrastructuur gescript en versiebeheerd wordt. Dus besloot ik om nieuwe EC2-instanties te lanceren met de nieuwste Ubuntu (aangezien mijn Mongo v2.4-servers ook 2 LTS-versies achterliepen) en de nieuwste MongoDB. Ik heb docker-afbeeldingen van tussenversies van MongoDB gebruikt om de gegevensupgrades uit te voeren.

https://gist.github.com/RichardBronosky267d04Bronosky267d04Bronosky267d04Bronoc... -sh

Het grootste deel van de oplossing is dit:

# 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. Hoe $push update-modifier te gebruiken in MongoDB en C#, bij het bijwerken van een array in een document

  2. Hoe een kaart in Java te serialiseren om op te slaan in Redis?

  3. Waarom lua scriptblok redis-server?

  4. Cloudera Operational Database applicatie-ontwikkelingsconcepten