当前位置: 首页 > news >正文

如何迁移备份MongoDB数据库?mongodump导出 + mongorestore导入全解析

前言

大家好,我是一诺。今天分享一个实用的 MongoDB 数据库迁移方案~

下班随手拍的夕阳🌇照片,感觉挺好看的,在北京的朋友,能猜到这是哪儿嘛

作为一个程序员,你一定遇到过这样的困扰:

  • 🤔 本地调试时:测试数据太假,没法复现线上问题
  • 😅 新同事入职时:环境搭建半天,数据准备一天
  • 😰 数据库升级前:心里没底,想先备份一下
  • 🔄 多环境协作时:开发、测试、生产数据不同步

怎么办呢?咱们使用 MongoDB 官方工具完成数据迁移,包括备份、传输和恢复的完整流程。

🗺️ 完整迁移流程图

1、数据恢复与验证

2、本地环境准备

3、数据恢复与验证

基本原理:两个工具搞定一切

MongoDB 官方提供了一对好兄弟:

mongodump   ←→   mongorestore备份              恢复

原理很简单:

  1. mongodump 把数据库内容导出为 BSON 文件
  2. mongorestore 把 BSON 文件导入到新环境

就像搬家一样,先打包,再搬运,最后拆包。

🔄 数据流转示意图

第一步:在服务器上备份数据

连接服务器

ssh username@your-server-ip

最简单的备份命令

如果你的 MongoDB 没有设置密码(仅限内网环境):

# 备份单个数据库
mongodump --db your_database_name --out /tmp/backup# 备份所有数据库  
mongodump --out /tmp/backup

有密码的情况

生产环境通常都有密码保护:

mongodump \--host localhost \--port 27017 \--username your_username \--password your_password \--authenticationDatabase admin \--db your_database_name \--out /tmp/backup

小贴士:可以不写 --password 的值,命令会提示你输入,这样更安全。

备份参数速查表

记不住那么多参数?这个表格帮你快速查找:

场景参数组合说明
本地数据库--db dbname --out /backup最基础用法
远程数据库--host 192.168.1.100 --port 27017指定服务器
需要认证--username user --password pwd --authenticationDatabase admin生产环境常用
压缩备份--gzip节省空间
单个文件--archive=backup.archive方便传输
部分数据--query '{"status":"active"}'只备份活跃数据

完整参数说明

点开查看 ### 打包下载 备份完成后,打包并下载:
# 打包(带时间戳)
tar -czf mongodb_backup_$(date +%Y%m%d_%H%M).tar.gz /tmp/backup# 下载到本地
scp username@server:/tmp/mongodb_backup_*.tar.gz ./

第二步:准备本地环境

安装 MongoDB

如果还没安装,先安装 MongoDB Community Edition。

重要:安装数据库工具

这里会遇到一个常见问题:新版MongoDB不再包含数据库工具包

问题现象

当你尝试使用mongorestore命令时,可能会遇到以下错误:

‘mongorestore’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。‘mongodump’ 不是内部或外部命令,也不是可运行的程序 或批处理文件

解决方案

这是因为MongoDB 4.4版本之后,官方将数据库工具包单独分离了。我们需要额外下载安装。

步骤1:下载工具包

访问MongoDB官方工具包下载页面:
Download MongoDB Command Line Database Tools

根据你的操作系统选择对应版本。Windows用户选择msi版本:

步骤2:正确安装

⚠️ 重要提醒:工具包必须安装在MongoDB的安装目录下,否则无法正常使用。

  • 如果MongoDB安装在C盘,工具包也要安装在C盘对应目录
  • 如果MongoDB安装在D盘,工具包也要安装在D盘对应目录

正确的安装目录示例:

建议:在系统变量中添加 MongoDB tools的目录,如下图

第三步:恢复数据到本地

解压备份文件

tar -xzf mongodb_backup_20250101_1430.tar.gz

启动本地 MongoDB

# Windows
net start MongoDB# macOS/Linux  
sudo systemctl start mongod

执行恢复

最简单的方式:

# 恢复单个数据库
mongorestore --db new_database_name /path/to/backup/old_database_name# 恢复全部数据库
mongorestore /path/to/backup

如果要覆盖现有数据:

mongorestore --drop --db target_db /path/to/backup/source_db

恢复参数速查表

场景参数组合说明
基础恢复--db dbname /backup/source恢复到指定数据库
覆盖数据--drop先删除现有数据
模拟运行--dryRun看看会做什么,不实际执行
压缩文件--gzip处理压缩备份
归档文件--archive=backup.archive从单文件恢复
重命名库--db new_name /backup/old_name恢复时改名

完整参数说明

点我查看

基础操作:

  • --db:目标数据库名(可与源不同)
  • --collection:目标集合名
  • --drop:恢复前删除现有数据
  • --dryRun:模拟运行,查看操作但不执行

数据筛选:

  • --nsInclude:包含的命名空间,如 "myapp\.(users|orders)"
  • --nsExclude:排除的命名空间,如 "myapp\.(logs|temp.*)"

性能调优:

  • --numParallelCollections:并行恢复数量
  • --numInsertionWorkers:每集合的插入线程数
  • --batchSize:批量插入大小,默认 100

索引处理:

  • --noIndexRestore:跳过索引,提高速度
  • --noOptionsRestore:跳过集合选项
## 实战场景 不同的需求场景,选择不同的策略。这个决策树帮你快速选择最佳方案:

🌳 场景选择决策树

场景一:快速搭建开发环境

# 服务器端:快速备份(压缩)
mongodump --db production --gzip --out /tmp/dev_backup# 本地:快速恢复(跳过索引)
mongorestore --db dev_env --noIndexRestore --gzip /backup/production

场景二:部分数据同步

# 只同步活跃用户数据
mongodump --db userdb --collection users \--query '{"lastLogin":{"$gte":"2024-01-01"}}' \--out /backup# 恢复到测试环境
mongorestore --db test_userdb /backup/userdb

场景三:数据库重命名迁移

# 备份原数据库
mongodump --db old_project --out /backup# 恢复为新名称
mongorestore --db new_project /backup/old_project

验证和检查

恢复完成后,看到这样的输出就说明成功了:

finished restoring myapp.users (1000 documents, 0 failures)
finished restoring myapp.orders (500 documents, 0 failures)
done

恢复成功后,你会看到类似的输出信息:

使用MongoDB客户端工具(如MongoDB Compass)连接数据库,验证数据是否导入成功:

常见问题解决

遇到问题不要慌,按照这个流程图一步步排查:

🔧 问题排查流程图

问题 1:找不到命令

现象: 'mongorestore' 不是内部或外部命令

解决:

  1. 确认已安装 MongoDB Database Tools
  2. 检查环境变量 PATH
  3. 重启命令行工具

仍然找不到命令怎么办?

如果执行命令仍然提示 ‘mongorestore’ 不是内部或外部命令

建议检查下系统变量,将工具目录添加至环境变量

问题 2:连接失败

现象: Failed to connect to localhost:27017

解决:

# 检查服务状态
mongo --eval "db.adminCommand('ismaster')"# 检查端口占用
netstat -an | grep 27017

问题 3:磁盘空间不足

现象: 恢复过程中报空间不足

解决:

# 检查空间
df -h# 清理临时文件
rm -rf /tmp/backup_*

问题 4:权限错误

现象: Permission denied

解决:

# 使用管理员权限
sudo mongorestore --db myapp /backup/myapp# 或修改文件权限
chmod -R 755 /backup

写在最后

咱们总结一下,一共四点:

  1. 工具包必须正确安装在MongoDB目录下 - 这是最容易踩的坑
  2. 备份前确认数据库连接正常 - 避免白忙一场
  3. 恢复前确保本地MongoDB服务运行正常 - 基础环境要准备好
  4. 注意数据安全和隐私保护 - 生产数据脱敏后再用于开发

MongoDB 数据迁移本身不复杂,但魔鬼在细节中。掌握了这些方法和技巧,数据迁移将不再是难题。

我是一诺,希望这篇教程对你有所帮助~

 

相关文章:

  • kettle好用吗?相较于国产ETL工具有哪些优劣之处?
  • 可观测性中的指标数据治理:指标分级、模型定义与消费体系让系统运行更透明!
  • 【AI Study】第四天,Pandas(7)- 实际应用
  • 单例模式:全局唯一实例的设计艺术
  • 第二课 数列极限的定义与性质
  • Node脚本开发含(删除、打包、移动、压缩)简化打包流程
  • 前端打断点
  • 代码随想录算法训练营day8
  • 微信二次开发,对接智能客服逻辑
  • Matplotlib快速入门
  • VS2017----配置opencv环境
  • SAST + IAST + DAST 全链路防护体系构建方案
  • 成组进位及其函数
  • HarmonyOS 5 鸿蒙多模态融合测试技术方案详解
  • MySQL学习(长期更新)
  • 如何通过 7 种有线或无线方式将视频从 PC 传输到 Android
  • 二分K-means:让聚类更高效、更精准!
  • Meta V-JEPA 2:革命性的视频联合的世界模型
  • AWS S3拒绝非https的请求访问
  • ASP.NET MVC 中SignalR实现实时进度通信的深度解析
  • 卖网店哪个平台可靠/网站优化外包费用
  • 现在网站建设还用测浏览器吗/营销广告语
  • 中国建设招标网站/百度客服在线客服入口
  • 找大学生做家教的网站/天津seo托管
  • 中山市做网站的公司/互动营销公司
  • 5站合一 网站建设/百度免费网站制作