1. 迁移前准备
在进行MongoDB迁移之前,需要进行充分的准备工作,包括规划迁移时间、准备目标服务器、备份数据等。更多学习教程www.fgedu.net.cn
– 安排在业务低峰期进行迁移
– 提前通知相关业务方,做好迁移计划
– 确保目标服务器的硬件配置不低于源服务器
– 准备足够的网络带宽用于数据传输
– 制定回滚方案,以防迁移失败
2. 源服务器检查
检查源服务器的MongoDB版本、数据大小、配置文件等信息。
# ssh root@192.168.1.51 “/mongodb/current/bin/mongod –version”
MongoDB server version: 4.4.10
# 检查源服务器MongoDB状态
# ssh root@192.168.1.51 “/mongodb/current/bin/mongo –host 192.168.1.51 –port 27017 -u admin -p fgedudb123 –authenticationDatabase admin –eval “db.serverStatus()”
{
“host” : “fgedudb01”,
“version” : “4.4.10”,
“process” : “mongod”,
“pid” : NumberLong(12345),
“uptime” : 86400,
“uptimeMillis” : NumberLong(86400000),
“uptimeEstimate” : NumberLong(86400),
“localTime” : ISODate(“2026-03-31T10:00:00Z”),
“asserts” : {
“regular” : 0,
“warning” : 0,
“msg” : 0,
“user” : 0,
“rollovers” : 0
},
“connections” : {
“current” : 10,
“available” : 65524,
“totalCreated” : 100
}
}
# 检查源服务器数据大小
# ssh root@192.168.1.51 “du -sh /mongodb/data/”
200G /mongodb/data/
# 检查源服务器配置文件
# ssh root@192.168.1.51 “cat /mongodb/conf/mongod.conf”
3. 目标服务器准备
准备目标服务器,包括操作系统安装、网络配置、目录创建等。学习交流加群风哥微信: itpux-com
# ssh root@192.168.1.52 “free -h”
total used free shared buff/cache available
Mem: 64G 2.1G 60G 8.5M 1.8G 61G
Swap: 32G 0B 32G
# 检查目标服务器磁盘空间
# ssh root@192.168.1.52 “df -h”
Filesystem Size Used Avail Use% Mounted on
devtmpfs 32G 0 32G 0% /dev
tmpfs 32G 0 32G 0% /dev/shm
tmpfs 32G 8.5M 32G 1% /run
tmpfs 32G 0 32G 0% /sys/fs/cgroup
/dev/sda1 50G 15G 36G 30% /
/dev/sdb1 2.0T 20G 1.9T 1% /mongodb
# 在目标服务器创建目录
# ssh root@192.168.1.52 “mkdir -p /mongodb/{current,conf,data,log,run}”
# ssh root@192.168.1.52 “chmod 755 /mongodb/{current,conf,data,log,run}”
# ssh root@192.168.1.52 “chown -R mongodb:mongodb /mongodb”
4. 数据备份
在迁移之前,对源服务器的MongoDB数据进行备份。
# ssh root@192.168.1.51 “mkdir -p /backup/mongodb/migration”
# 执行备份
# ssh root@192.168.1.51 “/mongodb/current/bin/mongodump –host 192.168.1.51 –port 27017 –username admin –password fgedudb123 –authenticationDatabase admin –out /backup/mongodb/migration/$(date +”%Y%m%d%H%M%S”)”
# 检查备份文件
# ssh root@192.168.1.51 “ls -la /backup/mongodb/migration/”
total 16
drwxr-xr-x 3 root root 4096 Mar 31 10:00 20260331100000
drwxr-xr-x 2 root root 4096 Mar 31 10:00 .
drwxr-xr-x 3 root root 4096 Mar 31 10:00 ..
# 压缩备份文件
# ssh root@192.168.1.51 “cd /backup/mongodb/migration && tar -czvf 20260331100000.tar.gz 20260331100000”
5. 数据传输
将备份文件传输到目标服务器。
# scp root@192.168.1.51:/backup/mongodb/migration/20260331100000.tar.gz root@192.168.1.52:/backup/mongodb/
# 传输配置文件到目标服务器
# scp root@192.168.1.51:/mongodb/conf/mongod.conf root@192.168.1.52:/mongodb/conf/
# 在目标服务器解压备份文件
# ssh root@192.168.1.52 “mkdir -p /backup/mongodb/migration && cd /backup/mongodb && tar -xzvf 20260331100000.tar.gz -C /backup/mongodb/migration/”
# 检查传输结果
# ssh root@192.168.1.52 “ls -la /backup/mongodb/migration/”
total 16
drwxr-xr-x 3 root root 4096 Mar 31 10:10 20260331100000
drwxr-xr-x 2 root root 4096 Mar 31 10:10 .
drwxr-xr-x 3 root root 4096 Mar 31 10:10 ..
6. 目标服务器安装MongoDB
在目标服务器安装MongoDB 4.4版本。
# ssh root@192.168.1.52 “cd /tmp && wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.10.tgz”
# 解压源码包
# ssh root@192.168.1.52 “cd /tmp && tar -zxvf mongodb-linux-x86_64-rhel70-4.4.10.tgz”
# 移动到安装目录
# ssh root@192.168.1.52 “mv /tmp/mongodb-linux-x86_64-rhel70-4.4.10 /mongodb”
# 创建符号链接
# ssh root@192.168.1.52 “ln -s /mongodb/mongodb-linux-x86_64-rhel70-4.4.10 /mongodb/current”
# 检查安装结果
# ssh root@192.168.1.52 “ls -la /mongodb/current/bin/”
total 153600
drwxr-xr-x 2 root root 4096 Mar 31 10:15 .
drwxr-xr-x 3 root root 4096 Mar 31 10:15 ..
-rwxr-xr-x 1 root root 10693632 Mar 31 10:15 mongod
-rwxr-xr-x 1 root root 1441536 Mar 31 10:15 mongos
-rwxr-xr-x 1 root root 14414336 Mar 31 10:15 mongo
-rwxr-xr-x 1 root root 10693632 Mar 31 10:15 mongodump
-rwxr-xr-x 1 root root 5347840 Mar 31 10:15 mongoexport
-rwxr-xr-x 1 root root 5347840 Mar 31 10:15 mongoimport
-rwxr-xr-x 1 root root 1441536 Mar 31 10:15 mongorestore
-rwxr-xr-x 1 root root 5347840 Mar 31 10:15 mongostat
-rwxr-xr-x 1 root root 5347840 Mar 31 10:15 mongotop
7. 数据恢复
在目标服务器恢复MongoDB数据。学习交流加群风哥QQ113257174
# ssh root@192.168.1.52 “sed -i ‘s/bindIp: 192.168.1.51/bindIp: 192.168.1.52/g’ /mongodb/conf/mongod.conf”
# 检查配置文件
# ssh root@192.168.1.52 “grep bindIp /mongodb/conf/mongod.conf”
bindIp: 192.168.1.52
# 恢复数据
# ssh root@192.168.1.52 “/mongodb/current/bin/mongorestore –host 192.168.1.52 –port 27017 –username admin –password fgedudb123 –authenticationDatabase admin –db fgedudb /backup/mongodb/migration/20260331100000/fgedudb”
8. 启动服务
在目标服务器启动MongoDB服务。
# ssh root@192.168.1.52 “cat > /etc/systemd/system/mongodb.service << EOF [Unit] Description=MongoDB Server After=network.target [Service] Type=forking User=mongodb Group=mongodb PIDFile=/mongodb/run/mongod.pid ExecStart=/mongodb/current/bin/mongod --config /mongodb/conf/mongod.conf ExecStop=/mongodb/current/bin/mongod --config /mongodb/conf/mongod.conf --shutdown Restart=on-failure [Install] WantedBy=multi-user.target EOF" # 重新加载系统服务 # ssh root@192.168.1.52 "systemctl daemon-reload" # 启动MongoDB服务 # ssh root@192.168.1.52 "systemctl start mongodb" # 检查服务状态 # ssh root@192.168.1.52 "systemctl status mongodb" ● mongodb.service - MongoDB Server Loaded: loaded (/etc/systemd/system/mongodb.service; disabled; vendor preset: disabled) Active: active (running) since Mon 2026-03-31 10:20:00 CST; 1min ago Main PID: 67890 (mongod) Tasks: 24 Memory: 1.0G CGroup: /system.slice/mongodb.service └─67890 /mongodb/current/bin/mongod --config /mongodb/conf/mongod.conf # 设置开机自启 # ssh root@192.168.1.52 "systemctl enable mongodb" Created symlink /etc/systemd/system/multi-user.target.wants/mongodb.service → /etc/systemd/system/mongodb.service.
9. 迁移验证
验证目标服务器的MongoDB服务是否正常运行,数据是否完整。
# ssh root@192.168.1.52 “/mongodb/current/bin/mongo –host 192.168.1.52 –port 27017 -u admin -p fgedudb123 –authenticationDatabase admin”
# 测试命令
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
fgedudb 0.200GB
> use fgedudb
switched to db fgedudb
> db.fgedu_users.insert({name: “测试用户”, age: 25, email: “test@fgedu.net.cn”})
WriteResult({ “nInserted” : 1 })
> db.fgedu_users.find()
{ “_id” : ObjectId(“60a7b3c4d5e6f7g8h9i0j1k2”), “name” : “测试用户”, “age” : 25, “email” : “test@fgedu.net.cn” }
> db.serverStatus()
{
“host” : “fgedudb02”,
“version” : “4.4.10”,
“process” : “mongod”,
“pid” : NumberLong(67890),
“uptime” : 360,
“uptimeMillis” : NumberLong(360000),
“uptimeEstimate” : NumberLong(360),
“localTime” : ISODate(“2026-03-31T10:26:00Z”),
“asserts” : {
“regular” : 0,
“warning” : 0,
“msg” : 0,
“user” : 0,
“rollovers” : 0
},
“connections” : {
“current” : 1,
“available” : 65534,
“totalCreated” : 1
}
}
> db.stats()
{
“db” : “fgedudb”,
“collections” : 10,
“views” : 0,
“objects” : 100000,
“avgObjSize” : 2000,
“dataSize” : 200000000,
“storageSize” : 200000000,
“numExtents” : 0,
“indexes” : 5,
“indexSize” : 10000000,
“fileSize” : 0,
“nsSizeMB” : 0,
“extentFreeList” : {
“num” : 0,
“totalSize” : 0
},
“dataFileVersion” : {
“major” : 0,
“minor” : 0
},
“ok” : 1
}
> exit
10. 业务切换
将业务流量从源服务器切换到目标服务器。更多学习教程公众号风哥教程itpux_com
# ssh root@192.168.1.51 “systemctl stop mongodb”
# 更新应用配置,将MongoDB地址指向目标服务器
# 例如,修改应用配置文件中的MongoDB地址
# vi /app/config/application.yml
# spring:
# data:
# mongodb:
# uri: mongodb://fgedu:fgedudb123@192.168.1.52:27017/fgedudb
# 重启应用服务
# systemctl restart app
# 验证应用是否正常访问MongoDB
# curl http://localhost:8080/mongodb-test
{“status”:”success”,”message”:”MongoDB connection successful”}
– 切换业务流量前,确保目标服务器的MongoDB服务正常运行
– 切换过程中,密切监控应用的运行状态
– 保留源服务器的MongoDB服务一段时间,以防需要回滚
– 切换完成后,验证所有业务功能是否正常
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
