MongoDBの更新
2025年6月7日の時点で
https://scrapbox.io はMongoDB 7.0で動作しています
オンプレ版もなるべく7.0まで更新する事をおすすめしますshokai.icon
オンプレ版Cosenseの動作には、MongoDB 5.0以上が必要です
MongoDB 5.0未満(4.x系など)では、appコンテナが起動しません
MongoDBはプログラムだけでなく、データにもバージョンが付いている
FeatureCompatibilityVersionと呼ばれる
MongoDB serverは、1つ前のバージョンのデータを読む事ができます
MongoDB server 3.8は、3.8と3.6のデータを読める
MongoDB server 3.6は、3.6と3.4のデータを読める
MongoDB server 4.0は、4.0のデータを読める
MongoDB 3.8は存在しない
3.6は読めない。4系と3系ではデータの互換性が無い
MongoDB server 4.2は、4.2と4.0のデータを読める
MongoDB server 4.4は、4.2と4.4のデータを読める
MongoDB 4.6は存在しない
MongoDB server 5.0は、4.4と5.0のデータを読める
MongoDB server 6.0は、5.0と6.0のデータを読める
詳しくはFeatureCompatibilityVersionで解説しています
MongoDBが古い場合
起動時のMongoDBバージョンチェックにより
推奨バージョンを満たしていない場合、警告が表示されます
必要バージョンを満たしていない場合、appコンテナが起動せず、即座に終了します
緊急回避方法
起動時のMongoDBバージョンチェックを回避する
MongoDBの更新
1つ上のバージョンのmongodbサーバーを起動し
データのFeatureCompatibilityVersionを更新する
これを3.6→4.0→4.2と1バージョンずつ繰り返す
MongoDBは3.4、3.6、4.0、4.2、4.4、5.0、6.0、7.0、8.0とバージョンが上がります
3.8と4.6は存在しません
https://docs.mongodb.com/manual/release-notes/
準備
サーバーを停止させてから、./mongoディレクトリをまるごとバックアップ取っておきましょう
$ docker-compose down
$ cp -R mongo mongo-backup
mongodbサーバーのバージョン指定
code:docker-compose.yml
mongo:
image: mongo:3.4 # ここを3.6, 4.0, 4.2と上げていく
mongodb更新 3.4→3.6
https://docs.mongodb.com/manual/release-notes/3.6-upgrade-standalone/
docker-compose.ymlをimage: mongo:3.6に変更してから
$ docker compose up mongo -d
mongoだけです。アプリケーションサーバーは起動させる必要はありませんshokai.icon
$ docker compose exec mongo mongo
featureCompatibilityVersionが3.4である事を確認し、3.6に書き換える
code:mongo
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{ "featureCompatibilityVersion" : { "version" : "3.4" }, "ok" : 1 }
db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )
{ "ok" : 1 }
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{ "featureCompatibilityVersion" : { "version" : "3.6" }, "ok" : 1 }
$ docker compose down
しっかり終了させる
以下、同じ操作の繰り返しです
mongodb更新 3.6→4.0
https://docs.mongodb.com/manual/release-notes/4.0-upgrade-standalone/
docker-compose.ymlをimage: mongo:4.0に変更してから
$ docker compose up mongo
$ docker compose exec mongo mongo
code:mongo
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{ "featureCompatibilityVersion" : { "version" : "3.6" }, "ok" : 1 }
db.adminCommand( { setFeatureCompatibilityVersion: "4.0" } )
{ "ok" : 1 }
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{ "featureCompatibilityVersion" : { "version" : "4.0" }, "ok" : 1 }
$ docker compose down
mongodb更新 4.0→4.2
https://docs.mongodb.com/manual/release-notes/4.2-upgrade-standalone/
docker-compose.ymlをimage: mongo:4.2に変更してから
$ docker compose up mongo
$ docker compose exec mongo mongo
code:mongo
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{ "featureCompatibilityVersion" : { "version" : "4.0" }, "ok" : 1 }
db.adminCommand( { setFeatureCompatibilityVersion: "4.2" } )
{ "ok" : 1 }
$ docker-compose down
mongodb更新 4.2→4.4
docker-compose.ymlをimage: mongo:4.4に変更してから
$ docker compose up mongo
$ docker compose exec mongo mongo
code:mongo
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{ "featureCompatibilityVersion" : { "version" : "4.2" }, "ok" : 1 }
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
{ "ok" : 1 }
$ docker compose down
mongodb更新 4.4→5.0
docker-compose.ymlをimage: mongo:5.0に変更してから
$ docker compose up mongo
$ docker compose exec mongo mongo
code:mongo
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{ "featureCompatibilityVersion" : { "version" : "4.4" }, "ok" : 1 }
db.adminCommand( { setFeatureCompatibilityVersion: "5.0" } )
{ "ok" : 1 }
$ docker compose down
mongodb更新 5.0→6.0
docker-compose.ymlをimage: mongo:6.0に変更してから
$ docker compose up mongo
$ docker compose exec mongo mongosh
MongoDB 6.0からmongoコマンドはmongoshになりました
code:mongo
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{ "featureCompatibilityVersion" : { "version" : "5.0" }, "ok" : 1 }
db.adminCommand( { setFeatureCompatibilityVersion: "6.0" } )
{ "ok" : 1 }
$ docker compose down
mongodb更新 6.0→7.0
docker-compose.ymlをimage: mongo:7.0に変更してから
$ docker compose up mongo
$ docker compose exec mongo mongosh
code:mongo
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{ featureCompatibilityVersion: { version: '6.0' }, ok: 1 }
db.adminCommand( { setFeatureCompatibilityVersion: '7.0' } )
MongoServerErrorLocation7369100: Once you have upgraded to 7.0, you will not be able to downgrade FCV and binary version without support assistance. Please re-run this command with 'confirm: true' to acknowledge this and continue with the FCV upgrade.
上げたら戻せません、という警告が表示される。confirm: trueを付けて更新する
code:mongo
test> db.adminCommand( { setFeatureCompatibilityVersion: '7.0', confirm: true } )
{ ok: 1 }
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{ featureCompatibilityVersion: { version: '7.0' }, ok: 1 }
$ docker compose down
mongodb更新 7.0→8.0
docker-compose.ymlをimage: mongo:8.0に変更してから
しばらく運用し、問題なければFeatureCompatibilityVersionを上げる
$ docker compose up mongo
$ docker compose exec mongo mongosh
code:mongo
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{ featureCompatibilityVersion: { version: '7.0' }, ok: 1 }
db.adminCommand( { setFeatureCompatibilityVersion: '8.0' } )
MongoServerErrorLocation7369100: Once you have downgraded the FCV, if you choose to downgrade the binary version, it will require support assistance. Please re-run this command with 'confirm: true' to acknowledge this and continue with the FCV downgrade.
上げたら戻せません、という警告が表示される。confirm: trueを付けて更新する
code:mongo
test> db.adminCommand( { setFeatureCompatibilityVersion: '8.0', confirm: true } )
{ ok: 1 }
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{ featureCompatibilityVersion: { version: '8.0' }, ok: 1 }
$ docker compose down
Cosenseが起動する事を確認し、これで完了です。お疲れさまでしたshokai.icon
$ docker-compose up