问题
Is there any way to upgrade a mongo database after the mongodb package was unintentionally upgraded (3.4.9 -> 3.6.1)?
According to the mongo docs, as a prerequisite of the upgrade, featureCompatibilityVersion
has to be set from the mongo
cli tool, which, however, needs a running mongod
database daemon, which, however, won't run if mongodb package was already upgraded and the database was not set the featureCompatibilityVersion
flag.
I'm on ArchLinux, I had mongodb in IgnorePkg
but it's dependencies boost-libs
and wiredtiger
got upgraded anyways. Having pacman cache already wiped out, I compiled older versions of the packages myself, but running mongodb keeps failing with this error:
unsupported WiredTiger file version: this build only supports major/minor versions up to 1/0, and the file is version 2/0: WT_ERROR: non-specific WiredTiger error
I don't have a clue what the hell this means (the problematic version of wiredtiger
is 2.9.3-1, version after the upgrade is 2.9.3.20171205-2).
Seems like I can neither downgrade nor upgrade...
Other cli tools (e.g. mongodump
) also won't run without a running database, is there any other possibility (some wiredtiger
related tool)? Deleting the database and starting afresh is not an option.
回答1:
I solved the problem by installing the older version of mongodb on a system for which it wasn't a problem to get it pre-packaged (well, Windows 10, even though oficially it's stated the package is for Windows Server 2008), copying the database files (contents of /var/lib/mongodb
) there, running it with --dbpath
param (mongod --dbpath /path/to/dbfiles
), setting the compatibility flag according to the docs and finally copying the db files back to the server.
Would like to know about a better option, but it's good to know the db files are easily transferable to another system, even another architecture (the db was relatively simple and small though).
来源:https://stackoverflow.com/questions/48381581/upgrading-older-mongo-database-after-unintentional-mongo-version-upgrade