Upgrading from MongoDB 3.6 to 4.0 seems to break the file storage. You need to do the upgrade manually in order for it to work. These are my notes on how I did it on Ubuntu 18.04 Bionic.
Downgrade Mongo from 4.0 to 3.6
If you're already running 4.0, you need to reinstall Mongo 3.6.
In /etc/apt/sources.list.d/
, ensure you have the file /etc/apt/sources.list.d/mongodb-org-3.6.list
, containing the line
deb [arch=amd64,arm64] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse
Yes, that is for Xenial: that's the latest version of Ubuntu with version 3.6 in the packages.
Then update apt
and downgrade mongodb
:
$ sudo systemctl stop mongod.service
$ sudo aptitude update
$ sudo apt-get install mongodb-org=3.6.8 mongodb-org-mongos=3.6.8 mongodb-org-server=3.6.8 mongodb-org-shell=3.6.8 mongodb-org-tools=3.6.8
$ sudo systemctl start mongod.service
Prepare for the upgrade
With Mongo 3.6 installed, now follow the official upgrade instructions.
Start a Mongo shell
$ mongo
In the shell, prepare for the upgrade:
> db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )
Check it worked:
> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
and check that "featureCompatibilityVersion" : { "version" : "3.6" }
is in the output.
Upgrade!
Ensure you have the file /etc/apt/sources.list.d/mongodb-org-4.0.list
containing the line
deb [arch=amd64] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse
A simple sudo aptitude update && aptitude full-upgrade
will then install Mongo 4.0.
Check it's working with $ sudo systemctl status mongod.service
and make sure you can connect to the Mongo shell with $ mongo
.
Convert the storage engine
While we're here, let's upgrade the storage engine from the now-deprecated mmapv1
to the supported wiredTiger
.
The official instructions are very clear.
- Create a directory to hold the backup:
$ sudo mkdir /opt/mongo
$ sudo chmod a+rwx /opt/mongo
- Back up the existing database:
$ mongodump --out /opt/mongo/
- Stop the Mongo server.
$ sudo systemctl stop mongod.service
- Remove the existing data storage
$ sudo rm -rf /var/lib/mongodb
- Enable the
wiredTiger
storage engine by changing thestorage
stanza in/etc/mongo.conf
by changing theengine
line to read:`
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
engine: wiredTiger
# mmapv1:
# wiredTiger:
- Restart Mongo
$ sudo systemctl start mongod.service
- Reload all your data
$ mongorestore /opt/mongo/
Everything should be working!