温馨提示×

MongoDB在Linux上的数据迁移步骤

小樊
46
2025-10-16 08:19:33
栏目: 云计算

1. 准备工作

  • 备份源数据:迁移前务必对源MongoDB实例进行完整备份(如使用mongodump),防止数据丢失。
  • 版本兼容性检查:确保源服务器与目标服务器的MongoDB版本兼容(建议使用相同版本或从低版本迁移到高版本)。
  • 目标环境准备:目标服务器需安装MongoDB且版本符合要求,确保mongod服务正常运行。
  • 权限配置:确保源数据库用户具备read权限(用于导出),目标数据库用户具备write权限(用于导入);若开启认证,需准备好账号密码。

2. 停止源MongoDB服务(可选但推荐)
为确保数据一致性,建议停止源服务器上的MongoDB服务,避免迁移过程中数据修改:

# 使用systemctl(适用于大多数现代Linux发行版,如CentOS 7+、Ubuntu 16.04+) sudo systemctl stop mongod # 若使用旧版init系统(如CentOS 6) sudo service mongod stop 

停止服务后,可通过ps -ef | grep mongod确认进程已终止。

3. 迁移数据(选择合适方法)
根据数据量、实时性要求选择以下方法之一:

方法一:使用mongodump/mongorestore(全量/增量迁移,推荐)

  • 全量导出:在源服务器上执行mongodump,将数据导出为BSON格式(保留索引、数据类型等结构):

    mongodump --host <源服务器IP> --port 27017 --out /path/to/source_dump 

    示例:导出mydb数据库到/tmp/mydb_dump目录:

    mongodump --host 192.168.1.100 --port 27017 -d mydb -o /tmp/mydb_dump 
  • 传输备份文件:将导出的dump目录复制到目标服务器(使用scprsync):

    scp -r /path/to/source_dump user@target_server:/path/to/target_dump 

    示例:将/tmp/mydb_dump复制到目标服务器的/tmp目录:

    scp -r /tmp/mydb_dump user@192.168.1.200:/tmp 
  • 全量恢复:在目标服务器上执行mongorestore,将数据导入到目标MongoDB实例:

    mongorestore --host <目标服务器IP> --port 27017 /path/to/target_dump/<数据库名> 

    示例:恢复mydb数据库到目标服务器的默认数据目录:

    mongorestore --host 192.168.1.200 --port 27017 /tmp/mydb_dump/mydb 
  • 增量迁移(可选):若需同步迁移后的增量数据,可使用mongodump--query参数导出自上次备份后修改的数据(需记录上次备份时间),再通过mongorestore导入目标服务器。

方法二:使用mongoexport/mongoimport(跨系统/逻辑迁移)

  • 导出数据:在源服务器上执行mongoexport,将指定集合导出为JSON或CSV格式(适合小数据量或跨系统迁移):

    mongoexport --host <源服务器IP> --port 27017 -d <数据库名> -c <集合名> --out /path/to/export_file.json 

    示例:导出mydb数据库的users集合到JSON文件:

    mongoexport --host 192.168.1.100 --port 27017 -d mydb -c users -o /tmp/users.json 
  • 传输导出文件:将导出的JSON/CSV文件复制到目标服务器(使用scp):

    scp /path/to/export_file.json user@target_server:/path/to/target_file.json 
  • 导入数据:在目标服务器上执行mongoimport,将数据导入到目标数据库:

    mongoimport --host <目标服务器IP> --port 27017 -d <数据库名> -c <集合名> --file /path/to/target_file.json 

    示例:导入users.json到目标服务器的mydb数据库:

    mongoimport --host 192.168.1.200 --port 27017 -d mydb -c users /tmp/users.json 

    注:mongoexport/mongoimport会丢失BSON格式中的部分特性(如索引、数据类型),仅适合简单数据迁移。

4. 验证数据一致性

  • 连接目标数据库:使用mongo shell连接到目标MongoDB实例:

    mongo --host <目标服务器IP> --port 27017 -u <用户名> -p <密码> --authenticationDatabase admin 
  • 检查数据量:查询目标数据库的集合数量、文档数量是否与源数据库一致:

    use mydb; show collections; // 检查集合是否存在 db.users.countDocuments(); // 检查文档数量(替换为实际集合名) 
  • 抽样验证:随机抽取部分文档,对比源数据库与目标数据库的内容是否一致:

    db.users.findOne({_id: ObjectId("xxxxxx")}); // 替换为实际文档ID 

5. 更新客户端连接配置

  • 修改连接字符串:将应用程序或客户端的连接字符串指向目标服务器的IP地址和端口(默认27017):

    mongodb://<目标服务器IP>:27017/<数据库名> 

    示例:若目标服务器IP为192.168.1.200,数据库名为mydb,则连接字符串为:

    mongodb://192.168.1.200:27017/mydb 
  • 测试连接:通过客户端(如MongoDB Compass、Robo 3T)或应用程序测试连接,确保能正常访问目标数据库。

6. 清理工作(可选)

  • 删除临时文件:迁移完成后,可删除源服务器的dump目录和目标服务器的临时备份文件,释放存储空间。
  • 重启源服务:若之前停止了源MongoDB服务,可重新启动:
    sudo systemctl start mongod 

0