如何将MongoDB数据库从一台Linux服务器迁移到另一台Linux服务器
mongodump是MongoDB官方推出的原生数据导出工具,属于MongoDB Database Tools套件的标准组件,专为数据备份、跨实例迁移场景设计,核心工作逻辑如下:
- 直接读取MongoDB实例存储层的BSON格式数据,导出产物包含完整的集合结构、文档数据、索引配置、校验规则等元信息,不会对源库的原有数据产生任何修改
- 默认导出产物会存放在当前执行命令的路径下的
dump目录中,每个数据库对应独立子目录:集合的业务数据存储为.bson文件,集合的元数据(索引、分片规则等)存储为.metadata.json文件 - 支持全量实例备份、单库备份、单集合备份三种模式,也支持通过查询条件过滤导出部分数据,适配不同迁移需求
- 注意:默认状态下mongodump不会导出
local系统库的内容,如果你有存储在local库的数据需要迁移,需要手动指定该库导出
迁移前需确认:源端和目标端安装的mongodump/mongorestore工具版本尽量和对应MongoDB服务版本一致,大版本差不要超过2个,避免出现兼容性问题。
第一步:源端执行全量导出
登录部署源MongoDB的Linux虚拟机,执行备份命令,若实例未开启身份鉴权,可删除-u、-p、--authenticationDatabase三个参数:mongodump -u [源库管理员用户名] -p [源库密码] --port [MongoDB服务端口,默认27017] --authenticationDatabase admin -o ./mongodb_full_bak
其中-o参数用于指定备份文件的输出目录,避免覆盖默认dump目录的历史备份。第二步:传输备份包到目标虚拟机
可以通过scp命令直接将备份目录传输到目标Linux虚拟机,执行命令时替换对应的目标机用户名、IP、存储路径:scp -r ./mongodb_full_bak [目标机用户名]@[目标机IP]:/data/mongobak/第三步:目标端执行全量导入
确认目标端MongoDB服务正常运行后,执行mongorestore命令导入备份数据,无鉴权可删除对应身份校验参数:mongorestore -u [目标库管理员用户名] -p [目标库密码] --port [目标MongoDB端口] --authenticationDatabase admin /data/mongobak/mongodb_full_bak
若目标端已存在同名数据库需要覆盖,可额外添加--drop参数,导入前会先删除目标库中已存在的同名集合,避免数据冲突。
导入完成后可登录目标MongoDB实例,执行show dbs、db.[对应集合名].countDocuments({})等命令核对数据量、集合结构是否和源端完全一致。
mongodump与配套的mongorestore是MongoDB官方首推的跨实例全量迁移工具,兼容MongoDB 4.0及以上所有正式版本。
单实例数据量大于100G的场景下,可添加--numParallelCollections参数指定并行导出的集合数量,可大幅提升导出、导入的执行效率。
内容的提问来源于stack exchange,提问作者Amrit R Asher

