MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Memulihkan dump basis data dari versi mongo yang lebih lama ke versi mongo yang baru

Saya menanyakan ini pertanyaan yang sama di milis resmi MongoDB . Mereka mengatakan untuk tidak meningkatkan lebih dari 1 versi utama sekaligus. (Versi utama adalah:2.2, 2.4, 2.6, 3.0, 3.2, 3.4)

Saya tidak ingin mengikuti proses pemutakhiran normal untuk menginstal setiap versi Hanya untuk meluncurkan mongod dan kemudian mematikannya. Itu terasa bagi saya seperti itu akan meninggalkan cruft di belakang dan saya ingin membangun infrastruktur saya dengan skrip dan versi yang dikendalikan. Jadi, saya memutuskan untuk meluncurkan instans EC2 baru dengan Ubuntu terbaru (karena server Mongo v2.4 saya juga memiliki versi 2 LTS di belakang) dan MongoDB terbaru. Saya menggunakan gambar buruh pelabuhan dari versi menengah MongoDB untuk melakukan peningkatan data.

https://gist.github.com/RichardBronosky/2d904c -sh

Sebagian besar solusinya adalah ini:

# 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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb mendapatkan catatan berbeda

  2. penyatuan koneksi mongodb

  3. Mengurutkan berdasarkan bidang virtual di mongoDB (luwak)

  4. Bagaimana cara mengonversi kueri agregasi MongoDB ke Laravel MongoDB oleh jenssegers

  5. Mongodb tidak diizinkan pada admin untuk menjalankan perintah listDatabases