在 CentOS 上做 MongoDB 数据迁移的实用方案
一、迁移前准备
- 版本与兼容性:尽量保持源与目标 MongoDB 版本一致或相近(如源为4.4,目标建议4.4+),避免跨大版本直接恢复导致兼容性问题。
- 安装与启动:在目标 CentOS 上安装同版本 MongoDB,启动并设置开机自启:
sudo systemctl start mongod
sudo systemctl enable mongod
- 认证与权限:若启用身份验证,提前在目标库创建管理员账户并授予权限;备份/恢复命令需携带 -u/-p 与 –authenticationDatabase admin。
- 网络与防火墙:确保源/目标网络互通,开放 27017 端口(firewall-cmd 放行)。
- 磁盘空间:目标服务器需预留充足空间(全量备份大小≈数据规模)。
- 一致性策略:停机窗口内迁移最稳妥;若需尽量不停机,考虑使用复制类工具实现增量同步。
二、方法一 mongodump + mongorestore(逻辑迁移,通用首选)
- 步骤1 备份源库(支持鉴权与指定库/集合):
mongodump --host 源IP --port 27017 --db mydb -u admin -p ‘pwd’ --authenticationDatabase admin --out /backup
- 步骤2 传输到目标 CentOS:
scp -r /backup 用户名@目标IP:/target
- 步骤3 恢复到目标库(可改名,谨慎使用 --drop 清空目标库):
mongorestore --host 127.0.0.1 --port 27017 --db mydb_target /target/mydb
mongorestore --host 127.0.0.1 --port 27017 --db mydb_target --drop /target/mydb
- 步骤4 校验数据:
mongo -u admin -p ‘pwd’ --authenticationDatabase admin
use mydb_target
show collections
db.collection_name.find().limit(10)
- 适用场景:跨版本/跨平台/只迁移部分库或集合;对停机容忍度中等。
三、方法二 拷贝数据文件(物理迁移,适合大数据量)
- 步骤1 一致性处理:建议停机后操作;如无法停机,可先对关键集合执行 db.fsyncLock() 锁定写入,迁移完成再解锁。
- 步骤2 确认数据目录:默认 /var/lib/mongodb,以 /etc/mongod.conf 中 storage.dbPath 为准。
- 步骤3 同步数据目录(示例):
rsync -avz --delete 源IP:/var/lib/mongodb/ 目标IP:/var/lib/mongodb/
- 步骤4 启动目标服务并校验:
sudo systemctl start mongod
sudo systemctl status mongod
连接 Shell 检查库表与数据。
- 适用场景:TB 级数据、追求最短停机时间;要求存储引擎与配置一致,风险与操作要求更高。
四、方法三 集合级迁移与不停机方案
- 集合级导出/导入(JSON/CSV,适合抽取子集或跨系统迁移):
mongoexport --host 源IP --port 27017 --db mydb -c users -u admin -p ‘pwd’ --authenticationDatabase admin --out users.json --type json
mongoimport --host 目标IP --port 27017 --db mydb_target -c users -u admin -p ‘pwd’ --authenticationDatabase admin --file users.json --type json
- 不停机迁移与实时同步:
- 使用 NineData 实现全量+增量迁移与一致性校验,适合业务不停服。
- 使用 mongoshake 基于复制流进行实时同步/迁移,适合数据中心迁移、升级或上云。
- 适用场景:只需迁移部分集合;需要最小化停机或持续同步。
五、常见问题与排错要点
- 版本不兼容:跨大版本直接 restore 可能失败,优先同版本迁移;必要时评估升级路径与兼容性矩阵。
- 权限与认证:备份/恢复命令需正确指定 –authenticationDatabase admin 与凭据;目标库需具备写入权限。
- 防火墙与网络:迁移前后核对 27017 端口放行与网络连通性。
- 数据一致性:物理拷贝务必在停机或锁定写入后进行;逻辑迁移建议在低峰期执行。
- 日志排查:失败优先查看 MongoDB 日志 /var/log/mongodb/mongod.log 定位问题。