Tôi đã hỏi điều này cùng một câu hỏi trong danh sách gửi thư MongoDB chính thức . Họ nói rằng không nên nâng cấp nhiều hơn 1 phiên bản chính cùng một lúc. (Các phiên bản chính là:2.2, 2.4, 2.6, 3.0, 3.2, 3.4)
Tôi không muốn thực hiện theo quy trình nâng cấp bình thường khi cài đặt mọi phiên bản Chỉ để khởi chạy mongod và sau đó tắt nó. Điều đó đối với tôi cảm giác như nó sẽ bỏ lại phía sau và tôi muốn có kịch bản xây dựng cơ sở hạ tầng và kiểm soát phiên bản của mình. Vì vậy, tôi quyết định khởi chạy các phiên bản EC2 mới với Ubuntu mới nhất (vì máy chủ Mongo v2.4 của tôi cũng chạy sau 2 phiên bản LTS) và MongoDB mới nhất. Tôi đã sử dụng hình ảnh docker của các phiên bản trung gian của MongoDB để nâng cấp dữ liệu.
https://gist.github.com/Richard9a35cpngufd060 -sh
Phần lớn giải pháp là:
# 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