温馨提示×

MongoDB在Ubuntu上的数据迁移怎么做

小樊
46
2025-09-27 18:05:33
栏目: 云计算

MongoDB在Ubuntu上的数据迁移流程及注意事项

在Ubuntu系统上迁移MongoDB数据,核心是通过官方工具链(mongodump/mongorestore、mongoexport/mongoimport)实现数据的高效转移,同时需关注环境准备、数据一致性及权限配置等关键环节。以下是具体操作指南:

一、迁移前准备

  1. 环境检查
    确保Ubuntu系统已安装MongoDB(可通过mongod --version验证服务端,mongo --version验证客户端)。若未安装,使用以下命令安装最新稳定版:

    sudo apt update
    sudo apt install -y mongodb
    
  2. 工具安装
    若需使用mongodump/mongorestore(二进制备份工具)或mongoexport/mongoimport(JSON/CSV格式工具),需额外安装mongodb-org-tools包:

    sudo apt install -y mongodb-org-tools
    
  3. 权限确认
    确保源数据库与目标数据库的用户具备**读(source)写(target)**权限。例如,源数据库用户需有read角色,目标数据库用户需有readWrite角色。

二、常用迁移方法

1. 使用mongodump/mongorestore(推荐:保留索引与数据类型)

适用场景:全量/增量迁移、需要保留索引结构、迁移大量数据。

  • 步骤1:备份源数据库
    使用mongodump导出源数据库(如mydb)到指定目录(如/tmp/mongodump):

    mongodump --uri="mongodb://source_host:27017" --db=mydb --out=/tmp/mongodump
    

    若源数据库需要认证,添加--username--password参数:

    mongodump --uri="mongodb://username:password@source_host:27017/admin" --db=mydb --out=/tmp/mongodump
    
  • 步骤2:传输备份文件到目标Ubuntu
    若源数据库在远程服务器,使用scp将备份目录复制到目标机器:

    scp -r /tmp/mongodump username@target_ubuntu_ip:/tmp/
    
  • 步骤3:恢复数据到目标数据库
    使用mongorestore将备份数据导入目标数据库(如mydb_target),--drop参数可先删除目标数据库(避免重复数据):

    mongorestore --uri="mongodb://target_host:27017" --db=mydb_target --drop /tmp/mongodump/mydb
    

2. 使用mongoexport/mongoimport(适合跨系统/格式转换)

适用场景:导出为JSON/CSV格式、跨数据库系统迁移(如MongoDB→MySQL)、小批量数据迁移。

  • 步骤1:导出单集合(JSON格式)
    使用mongoexport导出源数据库的mycollection集合到mycollection.json

    mongoexport --uri="mongodb://source_host:27017" --db=mydb --collection=mycollection --out=mycollection.json
    
  • 步骤2:传输JSON文件到目标Ubuntu

    scp mycollection.json username@target_ubuntu_ip:/tmp/
    
  • 步骤3:导入单集合到目标数据库
    使用mongoimport将JSON文件导入目标数据库的mycollection集合:

    mongoimport --uri="mongodb://target_host:27017" --db=mydb_target --collection=mycollection --file=/tmp/mycollection.json
    

3. 图形化工具(适合新手/可视化操作)

适用场景:无需命令行、快速迁移少量数据。

  • MongoDB Compass
    下载并安装MongoDB Compass,连接源数据库与目标数据库,通过“导出”→“导入”功能完成数据迁移(支持JSON/CSV格式)。

三、迁移后验证

  1. 数据量核对
    对比源数据库与目标数据库的集合数量文档数量是否一致:

    # 源数据库文档数
    mongo --uri="mongodb://source_host:27017" --eval "db.mydb.mycollection.countDocuments()"
    # 目标数据库文档数
    mongo --uri="mongodb://target_host:27017" --eval "db.mydb_target.mycollection.countDocuments()"
    
  2. 数据内容抽样
    随机抽取部分文档,对比源与目标数据库的字段值是否一致:

    # 源数据库抽样
    mongo --uri="mongodb://source_host:27017" --eval "db.mydb.mycollection.findOne()"
    # 目标数据库抽样
    mongo --uri="mongodb://target_host:27017" --eval "db.mydb_target.mycollection.findOne()"
    
  3. 索引检查
    确认目标数据库的索引是否与源数据库一致:

    # 源数据库索引
    mongo --uri="mongodb://source_host:27017" --eval "db.mydb.mycollection.getIndexes()"
    # 目标数据库索引
    mongo --uri="mongodb://target_host:27017" --eval "db.mydb_target.mycollection.getIndexes()"
    

四、注意事项

  1. 数据一致性
    迁移前停止源数据库的写入操作(或使用--oplog参数进行增量同步),避免迁移过程中数据变更导致不一致。

  2. 权限配置
    若目标数据库启用了认证,需在命令中添加--authenticationDatabase=admin参数(如mongorestore --uri="mongodb://username:password@target_host:27017/admin")。

  3. 网络带宽
    大批量数据迁移时,建议使用高速网络(如千兆以太网)或压缩备份文件(mongodump --gzip),减少迁移时间。

  4. 错误处理
    若迁移过程中出现E11000 duplicate key error(重复键),可使用--drop参数删除目标数据库中的重复数据;若出现认证失败,检查用户名、密码及认证数据库是否正确。

通过以上步骤,可实现MongoDB在Ubuntu系统上的高效、安全迁移。根据数据量、格式需求选择合适的工具,能有效提升迁移效率并保证数据完整性。

0