CentOS上MongoDB数据迁移的常用方法
一、准备工作
- 安装目标MongoDB实例:在目标CentOS服务器上安装与源实例版本兼容的MongoDB(建议使用相同主版本,如均为5.x或6.x),确保安装目录结构(如
/usr/local/mongodb/bin、/usr/local/mongodb/data)、配置文件(如/etc/mongod.conf)与源实例一致。 - 备份源数据:迁移前务必使用
mongodump工具备份源数据库,确保数据完整性和一致性。例如,备份mydb数据库到/backup目录:mongodump --host 源IP --port 27017 --db mydb --out /backup - 停止源服务:为避免数据写入冲突,停止源MongoDB服务。可使用systemctl命令:
sudo systemctl stop mongod或直接调用
mongod命令关闭:mongod --shutdown --dbpath /var/lib/mongo # 替换为源数据目录
二、核心迁移方法
1. 使用mongodump/mongorestore(推荐:适用于全库/集合迁移)
- 导出数据:通过
mongodump将源数据库导出为BSON格式(MongoDB原生二进制格式),保留索引、数据类型等结构信息。例如,导出mydb数据库的users集合到/backup目录:mongodump --host 源IP --port 27017 --db mydb --collection users --out /backup - 传输备份文件:使用
scp或rsync将备份目录从源服务器复制到目标服务器。例如:scp -r /backup user@目标IP:/tmp/backup - 恢复数据:在目标服务器上使用
mongorestore将备份数据导入到目标数据库。例如,恢复mydb数据库到目标实例:mongorestore --host 目标IP --port 27017 --db mydb /tmp/backup/mydb若需覆盖现有数据库,可添加
--drop参数(谨慎使用):mongorestore --host 目标IP --port 27017 --db mydb --drop /tmp/backup/mydb
2. 使用mongoexport/mongoimport(适用于单集合/结构化数据迁移)
- 导出数据:通过
mongoexport将单个集合导出为JSON或CSV格式(适合需要人类可读或跨数据库迁移的场景)。例如,导出mydb数据库的products集合为JSON格式:mongoexport --host 源IP --port 27017 --db mydb --collection products --out /backup/products.json --type=json若需导出指定字段(如
name、price),可添加-f参数:mongoexport --host 源IP --port 27017 --db mydb --collection products --out /backup/products.json --type=json -f name,price - 传输导出文件:使用
scp或rsync将导出文件复制到目标服务器:scp /backup/products.json user@目标IP:/tmp/ - 导入数据:在目标服务器上使用
mongoimport将数据导入到目标集合。例如,导入products.json到mydb数据库的products_new集合:mongoimport --host 目标IP --port 27017 --db mydb --collection products_new --file /tmp/products.json --type=json若目标集合已存在且需追加数据,可添加
--mode=append参数;若需覆盖,可添加--drop参数。
三、迁移后验证
- 数据完整性检查:连接目标MongoDB实例,查询关键集合的数据量和内容,确保与源实例一致。例如:
mongo 目标IP:27017/mydb > db.users.find().count() # 对比源实例的users集合数量 > db.products.find().forEach(printjson) # 抽样检查数据内容 - 应用连接测试:修改应用程序的数据库连接配置(如
mongodb://目标IP:27017/mydb),重启应用并验证是否能正常读写数据。 - 日志检查:查看目标MongoDB的日志文件(通常位于
/var/log/mongodb/mongod.log),确认无错误或警告信息。
四、注意事项
- 版本兼容性:确保源与目标MongoDB版本兼容(如5.x→6.x需注意新特性支持),避免因版本差异导致数据迁移失败。
- 权限配置:迁移过程中需使用具有足够权限的用户(如
admin数据库的readWrite或root角色),确保能访问和操作源/目标数据库。 - 网络与性能:大数据量迁移时,建议在低峰时段进行,使用
-j参数(mongodump/mongorestore)开启并行导出/导入,提高效率。例如:mongodump --host 源IP --port 27017 --db mydb --out /backup --j 4 # 并行4个集合 mongorestore --host 目标IP --port 27017 --db mydb /backup/mydb --j 4 # 并行恢复 - 增量迁移:若需迁移增量数据,可在全量备份后,使用
mongodump的--query参数导出增量数据(如{"last_update": {"$gt": "2025-08-01T00:00:00Z"}}),再通过mongorestore导入目标实例。