年初阿里云發布相關公告,MongoDB V3.0及3.2版本進入強制的EOFS階段
云上的小伙伴們,還有誰沒有升級呢???
【通知】MongoDB 3.0和3.2版本實例計劃于12月31日終止服務(EOS)
MongoDB 6.0也已經End Of Life Date,為啥不用V8.0呢?無他,因為從3x版本直升上來了,且V8.0發布快一年,只為降低風險而已

環境說明:
| 名稱 | 操作系統 | 配置 | 數據盤 | IP | 說明 |
|---|---|---|---|---|---|
| A服務器 | Centos 7.9 | 4H16G | 100G | 192.168.10.11 | 用于安裝MongoDB 6.0版本 |
| B服務器 | Centos 6.5 | 4H16G | 100G | 192.168.10.12 | V3.2版本,需遷移數據到A服務器 |
1. 環境準備
1.1 永久關閉SELinux(需要重啟服務器)
PS: 若不關閉,從MongoDB 5.0版本開始,需要做相關的配置,具體參考官方文檔
sed -i s#SELINUX=enforcing#SELINUX=disabled# /etc/selinux/config
1.2 開啟防護墻
查看防護墻已開啟,需要打開相關端口

firewall-cmd --remove-port=27017/tcp --permanent firewall-cmd --reload
1.3 優化系統資源
cat /etc/security/limits.conf
# 新增配置
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 32000
mongod hard nproc 32000
1.4 關閉透明大頁(推薦:通過 rc.local 永久禁用)
1.4.1 編輯 /etc/rc.d/rc.local 文件,新增配置
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
1.4.2 賦予執行權限:
chmod +x /etc/rc.d/rc.local
1.4.3 立即生效:
/etc/rc.d/rc.local
1.4.4驗證設置
cat /sys/kernel/mm/transparent_hugepage/enabled cat /sys/kernel/mm/transparent_hugepage/defrag
應顯示類似輸出:
always madvise [never]
1.5 安裝依賴
yum install -y libcurl openssl wget
1.6 創建倉庫文件(6.0)
cat /etc/yum.repos.d/mongodb-org-6.0.repo
[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc
2. 安裝最新穩定版 MongoDB 6.0
PS:需要在上文1.6中指定大版本
2.1 ??執行安裝命令??(默認創建所有者和群組名稱是mongod)
# 運行以下命令安裝 MongoDB 6.0 完整套件:
sudo yum install -y mongodb-org
2.2 檢查安裝是否成功:
mongod --version
db version v6.0.25
Build Info: {
"version": "6.0.25",
"gitVersion": "919f50c37ef9f544a27e7c6e2d5e8e0093bc4902",
"openSSLVersion": "OpenSSL 1.0.1e-fips 11 Feb 2013",
"modules": [],
"allocator": "tcmalloc",
"environment": {
"distmod": "rhel70",
"distarch": "x86_64",
"target_arch": "x86_64"
}
}
3. 配置及啟停mongod服務
3.1 創建專用的數據及日志目錄,并授權mongod用戶訪問??(不使用默認的情況)
PS:默認情況下使用/var/lib/mongo(數據目錄),/var/log/mongodb(日志目錄)
mkdir -p /data/mongodb mkdir -p /data/mongodb/{mbdata,mblog} chown -R mongod:mongod /data/mongodb
PS:設置正確的權限確保 MongoDB 服務可以訪問,系統啟動默認使用mongod用戶
3.2 啟動 MongoDB 服務??
使用 systemctl 啟動并設置開機自啟:
sudo systemctl start mongod
sudo systemctl enable mongod
sudo systemctl status mongod
檢查狀態:啟動狀態應顯示 active (running)。
3.3 查看進程
# ps -ef|grep mongo
mongod 13646 1 0 16:33 ? 00:00:07 /usr/bin/mongod -f /etc/mongod.conf
3.4 基本配置(可選)
編輯配置文件 /etc/mongod.conf
# 日志設置【PS:一定是文件,若為目錄則啟動報錯】
systemLog:
destination: file
logAppend: true
path: /data/mongodb/mglog/mongod.log
# Where and how to store data(數據目錄及內存設置)
storage:
dbPath: /data/mongodb/mgdata
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 3 # 設置為物理內存的50-60%
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
# network interfaces(允許遠程訪問)
net:
port: 27017
bindIp: 127.0.0.1,192.168.10.11 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
- 重啟mongod服務使得配置生效
sudo systemctl restart mongod
4. 登錄認證
4.1 登錄客戶端
mongosh --port 27017 -u admin -p "Virdb_123"
4.2 啟用登錄認證驗證
use admin
# 新建admin用戶
db.createUser({
user: "admin",
pwd: passwordPrompt(), // 交互式輸入密碼
roles: ["root"]
})
# Enter password
***********
設置完成后,修改配置文件 /etc/mongod.conf,增加配置
# 啟用認證(設置賬密后添加)
security:
authorization: enabled
PS:修改過配置文件,需要重啟mongod服務
4.3 更改密碼(有需要的話)
db.changeUserPassword("admin", "Virdb_123")
# 返回消息如下(PS:在V3.2版本,執行成功是沒有任何提示的)
{ ok: 1 }
4.4 設置免密登錄
cat ~/.bash_profile
# 增加
export MONGOPD="Virdb_123"
alias mosh='mongosh --port 27017 -u admin -p $MONGOPD'
# 立即生效
source ~/.bash_profile

5. 數據遷移兼容性測試(單集合處理)
PS:由于跨越多個版本,使用json導出格式
5.1 mongodb V3.2導出json格式的數據(單集合處理)
新建備份數據的目錄
mkdir -p /home/dmp/json
測試一個集合數據導出
mongoexport --port 27017 --db virdb --collection collection_2 --out /home/dmp/json/collection_2.json
輸出:
diagnosis.json 2025-08-21T10:17:52.011+0800 connected to: 192.168.10.12:27017 2025-08-21T10:17:52.050+0800 exported 430 records
5.2 數據導入mongodb V6.0(單集合處理)
將文件復制到mongodb V6.0的服務器上,路徑如下
/data/dmp/json/collection_2.json
執行單集合的導入
mongoimport --port 27017 -u admin -p "Virdb_123" --authenticationDatabase admin --db virdb --collection collection_2 --file /data/dmp/json/collection_2.json
輸出:
2025-08-21T10:18:51.171+0800 connected to: mongodb://localhost:27017/ 2025-08-21T10:18:51.197+0800 430 document(s) imported successfully. 0 document(s) failed to import.
5.3 數據驗證
查看集合狀態,比對集合大小,集合文檔數量,查看中英文是否有亂碼等
# 查看狀態
db.collection_2.stats()
# 查看集合數據
db.collection_2.find().limit(50)
狀態截選部分:

6. 數據遷移(批量處理)
6.1 mongodb V3.2導出json格式的數據(耗時與數據量有關,當前測試:1.5G數據用時6分鐘)
編輯腳本 exp_mongojson.sh
#!/bin/bash
# 獲取 test 數據庫中的所有集合名稱
collections=$(mongo --port 27017 virdb --eval "db.getCollectionNames()" --quiet | sed 's/\[//g' | sed 's/\]//g' | sed 's/,/ /g')
# 為每個集合執行導出
for collection in $collections; do
echo "Exporting $collection..."
mongoexport --host 192.168.10.12 --port 27017 --db virdb --collection $collection --out /home/dmp/json/$collection.json
done
給予執行權限
chmod a+x exp_mongojson.sh
執行腳本
nohup sh exp_mongojson.sh &
6.2 數據導入mongodb V6.0
刪除導入的測試索引【謹慎檢查執行的庫】
# 登錄
mosh
# 刪除測試索引
db.virdb.drop()
db.collection_2.drop()
批量導入的腳本
cat imp_mongo.sh
#!/bin/bash
for i in `ls /data/dmp/json/json` ;do
echo "處理集合$i----"
rname=`echo "$i" | awk -F '.' '{print $1}'`
mongoimport --port 27017 -u admin -p "Virdb_123" --authenticationDatabase admin --db virdb --collection $rname --file /data/dmp/json/$rname.json
done
執行腳本導入數據
nohup sh imp_mongo.sh &
6.3 數據驗證(集合抽樣查看前文5.3,并比對數據庫的集合數量和大小)
登錄查看集合格式及庫大小是否一致
use virdb
show dbs
show tables
7. 索引遷移之在Mongodb V6.0重建索引
7.1 在Mongodb V3.2上導出索引
新建js文件,寫入處理邏輯
// exp_mongo_index.js
var output = [];
var collections = db.getCollectionNames().filter(function(coll) {
return coll !== 'system.indexes' && coll !== 'system.profile'; // 排除系統集合
});
collections.forEach(function(coll) {
var indexes = db.getCollection(coll).getIndexes();
output.push({
collection: coll,
indexes: indexes
});
});
printjson(output);
執行導出
mongo --port 27017 virdb --quiet /home/script/exp_mongo_index.js > /home/script/expport_indexes.json
MongoDB V3.2導出的索引格式如下(節選):
cat expport_indexes.json
[
{
"collection" : "collection_1",
"indexes" : [
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "virdb.collection_1"
},
{
"v" : 1,
"key" : {
"cname" : 1
},
"name" : "cname_1",
"ns" : "virdb.collection_1",
"background" : true
}
]
}
]
7.2 在MongoDB V6.0重建相應索引(批量)
新建 import_indexes.js文件,寫入處理邏輯
// import_indexes.js
const fs = require('fs');
try {
// 1. 讀取并解析索引文件
const data = JSON.parse(fs.readFileSync('expport_indexes.json', 'utf8'));
// 2. 驗證數據格式
if (!Array.isArray(data) || data.length === 0) {
throw new Error("索引數據格式錯誤:應為非空數組");
}
// 3. 處理每個集合的索引
data.forEach(collectionData => {
const collectionName = collectionData.collection;
const indexes = collectionData.indexes;
// 4. 創建每個索引
indexes.forEach((index, i) => {
// 跳過默認的_id索引
if (index.name === "_id_") return;
// 準備選項
const options = {
name: index.name,
background: index.background || true, // 默認后臺創建
...index // 包含其他所有選項
};
// 刪除已包含在參數中的字段
delete options.key;
delete options.v;
delete options.ns;
print(`正在創建索引 ${index.name} 到集合 ${collectionName}`);
db.getCollection(collectionName).createIndex(index.key, options);
});
});
print("索引導入完成");
} catch (e) {
print(`導入失敗: ${e.message}`);
// 記錄詳細錯誤到日志
fs.writeFileSync('import_error.log', e.stack);
}
- 執行命令導入索引
mongosh --port 27017 -u admin -p $MONGOPD --authenticationDatabase admin hup --quiet import_indexes.js

- 索引驗證
db.collection_1.getIndexes()
8. 遇到的問題處理
8.1 登錄報錯沒有權限
{"t":{"$date":"2025-08-21T09:52:17.427+08:00"},"s":"I", "c":"ACCESS", "id":20249, "ctx":"conn66","msg":"Authentication failed","attr":{"mechanism":"SCRAM-SHA-256","speculative":true,"principalName":"admin","authenticationDatabase":"virdb","remote":"127.0.0.1:50340","extraInfo":{},"error":"UserNotFound: Could not find user \"admin\" for db \"virdb\""}}
**解決措施:**連接到驗證的admin庫,而非virdb庫
8.2 登錄啟動后的告警
The server generated these startup warnings when booting
2025-08-20T17:49:27.868+08:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
2025-08-20T17:49:28.812+08:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never' in this binary version
2025-08-20T17:49:28.812+08:00: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never' in this binary version
2025-08-20T17:49:28.812+08:00: vm.max_map_count is too low
解決措施: 關閉透明大頁,優化參數,參考前文1.3 、1.4章節
8.3 mongoexport 導出報錯
mongoexport --host 192.168.10.12 --port 27017 --db test --out /home/dmp/test
提示 2025-08-21T10:09:58.710+0800 error validating settings: must specify a collection
2025-08-21T10:09:58.710+0800 try 'mongoexport --help' for more information
解決措施: 這是由于其必須知道集合,故后續使用了腳本批量進行處理virdb下的所有集合
8.4 客戶端連報錯

Cannot connect to MongoDB.No suitable servers found: `serverSelectionTimeoutMS` expired: [failed to read 4 bytes: socket error or timeout
**解決措施:**防火墻未打開端口導致,參照前文1.3章節
8.5 測試使用mongodump/mongorestore 備份V3.2,恢復到6.0報錯
導出導入命令如下:
# V3.2執行導出
mongodump --host 192.168.10.11 --port 27017 --db virdb--out /home/dmp --gzip
# V6.0 執行導入
mongorestore --port 27017 -u admin -p $MONGOPD --authenticationDatabase admin virdb /data/dmp/virdb --gzip
報錯日志如下:
# 部分節選
2025-08-21T09:54:03.405+0800 don't know what to do with file "/data/dmp/virdb/collection_1.js.bson.gz", skipping...
2025-08-21T09:54:03.405+0800 don't know what to do with file "/data/dmp/virdb/collection_2.js.bson.gz", skipping...
解決措施: 不兼容導致,使用 mongoexport/mongoimport 導出json文件格式處理,參照前文數據遷移的章節
9. MongoDB 卸載【謹慎!謹慎!再謹慎!】
9.1 停止 MongoDB
通過發出以下命令來停止 mongod 進程:
sudo service mongod stop
9.2. 刪除包
刪除您之前安裝的所有 MongoDB 包:
sudo yum erase $(rpm -qa | grep mongodb-org)
9.3. 刪除數據目錄
刪除 MongoDB 數據庫和日志文件(查看配置文件可知):
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongo
10. 參考文檔及手冊:
10.1 手動安裝參考如下網址
官網下載地址
https://www.mongodb.com/try/download/community-kubernetes-operator
軟件下載地址:
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-6.0.25.tgz
當前選擇的6.0的最新版本:6.0.25版本

10.2 官方文檔
https://www.mongodb.com/zh-cn/docs/v6.0/
mongosh的安裝及使用
https://www.mongodb.com/zh-cn/docs/mongodb-shell/install/#supported-operating-systems
具體的,在centos上6.0安裝說明:
https://www.mongodb.com/zh-cn/docs/v6.0/tutorial/install-mongodb-on-red-hat/
Database Tools(含上述使用過的mongoimport)
https://www.mongodb.com/zh-cn/docs/database-tools/




