2016-06-15 20 views
5

Derzeit habe ich eine ältere Version von Mongo, d. H. 2.6 läuft auf meinem System. Ich habe bereits meine Website in Produktion und habe viele Kundendaten. Ich plane ein Upgrade auf mongo 3.2.Wiederherstellen der Datenbank-Dump einer älteren Version von Mongo auf eine neue Version von Mongo

So ist meine Frage, ob mongorestore von Mongo v3.2 Arbeit mit Daten-Dump von v2.6? Oder ist es bekannt, Probleme zu schaffen?

Alle Antworten sind von unschätzbarem Wert! Danke

Antwort

5

Da Sie Daten von mongo 2.6 haben, ist die Indexfeldbegrenzung bereits erfüllt. Mongo 3.2 wird diese Sicherung ohne irgendein Problem wiederherstellen.

Die andere Art und Weise Sie Ihre db aktualisieren können (wenn Sie Replikatssatz haben) ist ein 2,6-Mitglied 3.2 zu ersetzen und für die Synchronisation warten, dann andere ... Dies wird Ihnen Business Continuity geben :-)

+1

Schätzen Sie es ein Mann. – SRINI794

+1

Ja, ich habe diese Frage auf der offiziellen MongoDB-Mailingliste gestellt und sie sagte, dass sie nicht mehr als 1 Hauptversion auf einmal upgraden sollten. (Hauptversionen sind: 2.2, 2.4, 2.6, 3.0, 3.2, 3.4) https://groups.google.com/d/msg/mongodb-user/cbXeM283iHM/y0QbW1h4BQAJ –

7

Ich fragte diese same question on the official MongoDB mailing list. Sie sagten, dass sie nicht mehr als 1 Hauptversion auf einmal aktualisieren sollten. (Hauptversionen sind: 2.2, 2.4, 2.6, 3.0, 3.2, 3.4)

Ich wollte nicht den normalen Upgrade-Prozess der Installation jeder Version folgen Nur um mongod zu starten und dann heruntergefahren. Das fühlt sich für mich so an, als würde es den Hinterhalt hinter mir lassen und ich möchte, dass meine Infrastruktur gebastelt und versionsgesteuert wird. Also entschied ich mich, neue EC2-Instanzen mit dem neuesten Ubuntu zu starten (da meine Mongo v2.4-Server auch 2 LTS-Versionen hinter sich hatten) und die neueste MongoDB. Ich habe Docker-Images von Midgovern von MongoDB verwendet, um die Daten zu aktualisieren.

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

Der Großteil der Lösung ist dies:

# 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 
+0

Es flippt mich immer aus, wenn meine Antwort upvotes und keine Kommentare. Kann mein Code wirklich so klar sein? Es ist schließlich Bash. –

+1

Kommentieren nur für Brunos Meinung;) Danke, Bruno! Du hast meinen Tag gerettet (oder zwei :)! Es hat nicht "out of the box" geflogen, weil ich "mongodump -h " nicht aus der Ferne bekommen konnte, musste auch neue separate 30GB EBS auf Amazon wegen Glück des erforderlichen freien Speicherplatzes auf "/" Laufwerk (und dementsprechend ändere hier und da die Wege). Auch im ersten Schritt (wenn Sie mongorestore tun) wurde ein Fehler: in Namespace [admin.system.users] Assertion: 17415 Kann Benutzer mit Schema Version 1 nicht auf einem System mit Server Version 2.5.4 oder höher wiederherstellen ", Workaround war um den Ordner/data/db/dump/admin zu entfernen. –