温馨提示×

centos上mongodb数据迁移方法

小樊
62
2025-08-30 17:44:13
栏目: 云计算

CentOS上MongoDB数据迁移的常用方法

一、准备工作

  1. 安装目标MongoDB实例:在目标CentOS服务器上安装与源实例版本兼容的MongoDB(建议使用相同主版本,如均为5.x或6.x),确保安装目录结构(如/usr/local/mongodb/bin/usr/local/mongodb/data)、配置文件(如/etc/mongod.conf)与源实例一致。
  2. 备份源数据:迁移前务必使用mongodump工具备份源数据库,确保数据完整性和一致性。例如,备份mydb数据库到/backup目录:
    mongodump --host 源IP --port 27017 --db mydb --out /backup
    
  3. 停止源服务:为避免数据写入冲突,停止源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
    
  • 传输备份文件:使用scprsync将备份目录从源服务器复制到目标服务器。例如:
    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
    
    若需导出指定字段(如nameprice),可添加-f参数:
    mongoexport --host 源IP --port 27017 --db mydb --collection products --out /backup/products.json --type=json -f name,price
    
  • 传输导出文件:使用scprsync将导出文件复制到目标服务器:
    scp /backup/products.json user@目标IP:/tmp/
    
  • 导入数据:在目标服务器上使用mongoimport将数据导入到目标集合。例如,导入products.jsonmydb数据库的products_new集合:
    mongoimport --host 目标IP --port 27017 --db mydb --collection products_new --file /tmp/products.json --type=json
    
    若目标集合已存在且需追加数据,可添加--mode=append参数;若需覆盖,可添加--drop参数。

三、迁移后验证

  1. 数据完整性检查:连接目标MongoDB实例,查询关键集合的数据量和内容,确保与源实例一致。例如:
    mongo 目标IP:27017/mydb
    > db.users.find().count()  # 对比源实例的users集合数量
    > db.products.find().forEach(printjson)  # 抽样检查数据内容
    
  2. 应用连接测试:修改应用程序的数据库连接配置(如mongodb://目标IP:27017/mydb),重启应用并验证是否能正常读写数据。
  3. 日志检查:查看目标MongoDB的日志文件(通常位于/var/log/mongodb/mongod.log),确认无错误或警告信息。

四、注意事项

  • 版本兼容性:确保源与目标MongoDB版本兼容(如5.x→6.x需注意新特性支持),避免因版本差异导致数据迁移失败。
  • 权限配置:迁移过程中需使用具有足够权限的用户(如admin数据库的readWriteroot角色),确保能访问和操作源/目标数据库。
  • 网络与性能:大数据量迁移时,建议在低峰时段进行,使用-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导入目标实例。

0