苦逼前端

MongoDB 4.4 迁移以及开启事务

Javascript2025-12-10 00:22:41mongodb

之前一直用的 MongoDB@3.6, 还是上次 ubuntu 从 12 升级到 22 时顺手搞的,在这之前一直用的 2.6 版本。

因为想支持事务,而 MongoDB 只能在 4.0 版本及之后才能支持,4.2 才支持跨分片事务。所以又有了这次的折腾。否则一些需要一致性的异步操作需要手动管理,成本很大还不一定能成功。举个例子:A 转账给 B, 需要先给 A 扣钱,再给 B 加钱,这两个动作要成功都得成功,要失败就都失败,没有事务会变得非常麻烦。

先停止服务并备份:
systemctl stop mongod
cp -R /xxx/db /xxx/db.bak

MongoDB 官方对升级路径有明确限制:一次升级最多跨两个次要版本(minor version), 4.x 系列的最新版本是 4.4, 所以我们需要先升级到 4.0, 再升级到 4.2, 最后升级到 4.4, 依次做如下操作:
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.28.tgz
tar xvf mongodb-linux-x86_64-4.0.28.tgz
./mongodb-linux-x86_64-4.0.28/bin/mongod --config /xxx/mongod.conf ./mongodb-linux-x86_64-4.0.28/bin/mongo db.adminCommand({ setFeatureCompatibilityVersion: "4.0" }) exit ./mongodb-linux-x86_64-4.0.28/bin/mongod --config /xxx/mongod.conf --shutdown

然后升到 4.2.24, 过程类似,下载文件 mongodb-linux-x86_64-debian10-4.2.24.tgz
最终升级到 4.4.29, 下载文件 mongodb-linux-x86_64-debian10-4.4.29.tgz

实际操作过程中,遇到了 4.2 不支持之前的 MMAPv1, 需要在 4.0 下把 MMAPv1 迁移到 WiredTiger 才能继续升级,需要导出导入数据,还比较麻烦。这在大模型横行的时代也不是什么难事,跟着一步步的操作即可。同时也要避免大模型的幻觉导致一些不可逆的操作损坏数据,最好先做最小化测试。

升级完成后,尝试使用事务时发现必须开启副本集才能使用。所以又折腾了开启副本集:
编辑 /xxx/mongod.conf, 加入 replSet=rs0
然后启动 mongod ./mongodb-linux-x86_64-4.0.28/bin/mongod --config /xxx/mongod.conf
连入后执行 rs.initiate() 即可完成副本集的初始化,原来的数据也会自动同步到副本集

讨论(0)
  • 暂无,求挽尊 ~
还可输入2000个字
京公网安备 11011202003202号 鲁ICP备 13027548号-1