温馨提示×

MongoDB在Linux上的数据迁移步骤是什么

小樊
48
2025-11-06 18:33:02
栏目: 云计算

1. 准备工作

  • 版本兼容性检查:确保源服务器与目标服务器的MongoDB版本兼容(建议从低版本迁移到高版本,避免高版本→低版本的兼容性问题)。
  • 安装迁移工具:目标服务器需安装与源服务器版本匹配的MongoDB Database Tools(包含mongodumpmongorestore等命令),可通过官网下载对应版本的工具包解压安装。
  • 权限准备:确保源数据库用户具备read权限(用于导出数据),目标数据库用户具备readWrite权限(用于导入数据);若开启认证,需准备好账号密码。
  • 空间与网络:目标服务器需预留足够的磁盘空间存储迁移数据;源与目标服务器间需有稳定的网络连接(大数据量迁移建议在业务低峰期进行,减少对业务的影响)。

2. 停止源数据库服务(可选,确保数据一致性)
若迁移期间不允许源数据库写入,可停止MongoDB服务以避免数据不一致:

# Systemd系统(如CentOS 7+、Ubuntu 16.04+)
sudo systemctl stop mongod  

# SysVinit系统(如CentOS 6)
sudo service mongod stop  

注:若允许源数据库继续写入,需确保后续使用--oplog参数(用于增量同步),但会增加迁移复杂度。

3. 导出源数据库数据
根据数据量大小和需求选择合适的导出方式:

  • 全量导出(推荐):使用mongodump导出整个数据库(含结构和数据),生成BSON格式文件(适合跨服务器迁移):
    mongodump --host <源服务器IP> --port <源端口,默认27017> --username <用户名> --password <密码> --authenticationDatabase admin --db <源数据库名> --out /path/to/export/dir
    
    示例:导出testdb数据库到/home/user/mongo_dump目录:
    mongodump --host 192.168.1.100 --port 27017 --username admin --password 123456 --authenticationDatabase admin --db testdb --out /home/user/mongo_dump
    
  • 单个集合导出:若只需迁移特定集合,可添加--collection参数:
    mongodump --host 192.168.1.100 --port 27017 --username admin --password 123456 --authenticationDatabase admin --db testdb --collection users --out /home/user/mongo_dump
    
  • JSON格式导出(跨版本兼容):若版本差异较大,可使用mongoexport导出为JSON格式(仅保留数据,不保留索引、权限等信息):
    mongoexport --host 192.168.1.100 --port 27017 --username admin --password 123456 --authenticationDatabase admin --db testdb --collection users --out /home/user/users.json
    

4. 传输导出文件到目标服务器
使用scp(安全拷贝)或rsync(增量同步)将导出的数据文件传输到目标服务器:

# scp传输(全量文件)
scp -r /path/to/export/dir <目标服务器用户名>@<目标服务器IP>:/path/to/target/dir

# 示例:将本地的mongo_dump目录传输到目标服务器的/home/user目录
scp -r /home/user/mongo_dump user@192.168.1.200:/home/user

注:-r参数表示递归传输目录,确保所有子目录和文件都被复制。

5. 导入数据到目标数据库
根据导出格式选择对应的导入命令:

  • BSON格式导入(推荐):使用mongorestore导入mongodump生成的BSON文件(保留数据结构和索引):
    mongorestore --host <目标服务器IP> --port <目标端口,默认27017> --username <用户名> --password <密码> --authenticationDatabase admin --db <目标数据库名> /path/to/export/dir/<源数据库名>
    
    示例:将/home/user/mongo_dump/testdb导入到目标服务器的testdb数据库:
    mongorestore --host 192.168.1.200 --port 27017 --username admin --password 123456 --authenticationDatabase admin --db testdb /home/user/mongo_dump/testdb
    
  • JSON格式导入:使用mongoimport导入mongoexport生成的JSON文件(仅导入数据):
    mongoimport --host 192.168.1.200 --port 27017 --username admin --password 123456 --authenticationDatabase admin --db testdb --collection users --file /home/user/users.json
    
  • 增量导入(可选):若源数据库仍在写入,可使用--oplogReplay参数导入增量数据(需配合mongodump --oplog使用):
    mongorestore --host 192.168.1.200 --port 27017 --username admin --password 123456 --authenticationDatabase admin --db testdb --oplogReplay /home/user/mongo_dump/testdb
    

6. 验证数据完整性

  • 连接目标数据库:使用mongo shell连接目标服务器,检查数据库和集合是否存在:
    mongo --host 192.168.1.200 --port 27017 -u admin -p 123456 --authenticationDatabase admin
    > use testdb
    > show collections
    
  • 查询数据:选择关键集合,查询数据条数或具体字段,与源数据库对比:
    > db.users.countDocuments()  # 检查users集合的文档数量
    > db.users.find().limit(5)    # 查看前5条数据
    
  • 检查索引:确认目标数据库的索引是否与源数据库一致(mongorestore会自动恢复索引,无需手动创建):
    > db.users.getIndexes()
    

7. 清理与切换

  • 清理临时文件:迁移完成后,可删除源服务器的导出文件和目标服务器的临时目录,释放磁盘空间。
  • 更新应用配置:将应用程序的数据库连接字符串(如mongodb://192.168.1.200:27017/testdb)更新为目标服务器地址,重启应用以使用新数据库。
  • 监控目标数据库:迁移后观察目标数据库的性能(如CPU、内存、磁盘IO),确保无异常。

0