せっかくなので、最新のStable版4.2にしようとしたらハマったので、メモです。
もくじ
前提条件
- Ubuntu Linux(18.04 bionic)OS上で実行されているMongoDB
- 作業マシン上でMongoDBが稼働
- MongoDB 3.6,4.0 とUpgradeされてきた
- 格納データは、比較的少量
流れ
- 既存のMongoDBは4.0で4.2にUpgrade
- 「WiredTiger」のエラーが出たので、解消させる
- 4.2から4.0にDowngrade
- データをダンプ
- MongoDBをPurge
- 既存データファイルを削除
- MongoDB4.2をinstall
- ダンプしたデータをrestore
既存のMongoDBは4.0で4.2にUpgrade
既存のMongoDBは、「4.0」でした。しかしながら、「3.6」からUpgradeを経たものでした。
(2019年に作ったのになんでだろう?w)
公式のドキュメント通りに進めていきます
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add - echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list sudo apt-get update sudo apt-get upgrade # 既存でMongoDBはインストールされていたため、upgrade
「WiredTiger」のエラーが出たので、解消させる
しかーし!エラーが2020-03-04T12:53:55.236+0900 E STORAGE [initandlisten] WiredTiger error (13) [1583294035:236642][1094:0x7f2b0166db00], wiredtiger_open: __posix_open_file, 667: /var/lib/mongodb/WiredTiger.turtle: handle-open: open: Permission denied Raw: [1583294035:236642][1094:0x7f2b0166db00], wiredtiger_open: __posix_open_file, 667: /var/lib/mongodb/WiredTiger.turtle: handle-open: open: Permission denied「Permission denied」。。。なんだと。。。
確認するも、権限でおかしそうなものはない。
WiredTigerで調べてみると、どうやら旧版の「MMAPv1」から移行する必要があるみたい
しかも、WiredTigerが採用されたのって、「Starting in MongoDB 3.2」だって。
2018年だか、2019年に作ったのになんでー!って思いながらも
せっかくなので、移行しておこうかと。
4.2から4.0にDowngrade
とりあえず、dump取ろうにもMongoDBが立ち上がっていないので。Downgradeして立ち上げることにした。
sudo apt remove mongo* sudo rm /etc/apt/sources.list.d/mongodb-org-4.2.list wget -qO - https://www.mongodb.org/static/pgp/server-4.0.asc | sudo apt-key add - echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list sudo apt-get update sudo apt-get install -y mongodb-org sudo systemctl restart mongod.service
データをダンプ
公式の移行手順
こちらは参考程度に。
mongodump --out=hogehoge-dir
MongoDBをPurge
sudo systemctl stop mongod.service sudo apt-get purge mongodb*
既存データファイルを削除
パッケージを削除しただけでは、既存データは残るので。そちらを削除します。
sudo rm -rf /var/lib/mongodb
MongoDB4.2をinstall
また、新たにMongoDBをinstallwget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add - echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list sudo apt-get update sudo apt-get install -y mongodb-org
ダンプしたデータをrestore
先程ダンプしたデータをrestoreしますsudo systemctl restart mongod.service mongorestore hogehoge-dirこれで、アプリケーションから接続できて
正常稼働できることを確認します。
まとめ
ここに至るまで、いろいろ試行錯誤したのでメモにしました。結局の所
- データをダンプして
- MongoDBのデータファイル消して、installし直し
- データのリストア
この方法だと、データ量が多いと難しいと思うので、公式の手順を参考にアレンジするしかないですね!