2016-06-15 18 views
5

Şu anda, mongo'nun eski bir sürümüne sahibim, yani sistemimde 2.6 çalışıyor. Sitemde zaten üretim var ve çok fazla müşteri verisi var. Ben mongo 3.2 için bir yükseltme planlıyorum.mongo'nun eski bir sürümünün veritabanı dökümü geri yükleme, mongo'nun yeni bir sürümüne geri dönüyor

Yani, sorum olup olmadığını v2.6 veri dökümü ile Mongo v3.2 işin mongorestore? Ya da sorun yarattığı biliniyor mu?

Herhangi bir cevap çok değerli! Teşekkürler

cevap

5

mongo 2.6'dan verileriniz olduğundan, dizin alanı sınırlaması zaten yerine getirilmiştir. Mongo 3.2 bu yedeği herhangi bir sorun olmadan geri yükleyecektir. Eğer (eğer yineleme kümesi varsa) db yükseltebilirsiniz

başka yolu 3.2 ile bir 2.6 üyenin yerine ve senkronize beklemek, sonra diğeri ... Bu, iş sürekliliği verecektir

+1

erkek Memnun. – SRINI794

+1

Evet, bu soruyu resmi MongoDB posta listesinde sordum ve bir seferde birden fazla ana versiyonunu yükseltmemelerini söylediler. (Başlıca sürümleri: 2.2, 2.4, 2.6, 3.0, 3.2, 3.4) https://groups.google.com/d/msg/mongodb-user/cbXeM283iHM/y0QbW1h4BQAJ –

7
:-)

Bunu same question on the official MongoDB mailing list numaralı telefondan sordum. Bir kerede birden fazla ana versiyonunu yükseltmemelerini söylediler. (Başlıca sürümleri: 2.2, 2.4, 2.6, 3.0, 3.2, 3.4)

Tüm sürümleri yüklemek için normal yükseltme işlemini izlemek istemiyorum Sadece mongod'u başlatmak ve sonra kapatmak. Bu, benim için arkamdan ayrılmayı tercih ediyor ve altyapı inşa etme senaryolarımı ve sürümleri kontrol etmeyi seviyorum. Bu yüzden, en son Ubuntu'yla yeni EC2 örnekleri başlatmaya karar verdim (benim Mongo v2.4 sunucularm da 2 LTS versiyonları olduğu için) ve en son MongoDB. Veri yükseltmelerini yapmak için MongoDB ara sürümlerinin docker görüntülerini kullandım.

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

çözeltinin kütle şudur:

# 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

Cevabım yükseldikçe her zaman beni korkutuyor ve yorum yok. Kodum gerçekten bu kadar açık olabilir mi? Her şeyden önce bash. –

+1

Sadece Bruno'nun aklına hitap eden yorum;) Teşekkürler Bruno! Günümü kurtardın (ya da iki :)! "Kutudan dışarı uçmadı" çünkü uzaktan "mongodump -h " almıyordum, ayrıca "/" sürücüsünde gerekli boş alan şansından dolayı Amazon'da ayrı ayrı 30GB EBS monte etmek zorunda kaldım (ve buna göre) yolları burada ve orada değiştirin. Ayrıca 1 adımda (mongorestore yaptığınızda) bir hata oluştu: ad alanına girme [admin.system.users] iddiası: 17415 Şema sürüm 1 ile kullanıcıların geri yüklenememesi, sunucu sürümü 2.5.4 veya daha büyük bir sisteme geri yüklenemez ", geçici çözüm/data/db/dump/admin klasörünü kaldırmak. –