跳到主要内容

第5章 MongoDB备份与恢复

备份恢复工具概述

MongoDB提供了多种备份和恢复工具,适用于不同的应用场景和数据格式需求。

主要工具分类:

工具组合数据格式主要用途
mongodump/mongorestoreBSON + GZIP定时备份,全量备份
mongoexport/mongoimportJSON/CSV分析数据,迁移数据

mongodump备份工具

全库备份

备份所有数据库:

mongodump --port 28017 -o mongo_backup

备份副本集数据:

mongodump --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -o mongo_backup

单库备份

只备份指定数据库:

mongodump --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -d oldboy -o mongo_backup

单集合备份

只备份指定库下的指定集合:

mongodump --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -d oldboy -c user_info -o mongo_backup

压缩格式备份

使用gzip压缩格式:

mongodump --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -o mongo_backup --gzip

mongorestore恢复工具

BSON格式恢复

恢复标准BSON格式数据:

mongorestore --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" mongo_backup

GZIP格式恢复

恢复压缩格式数据:

mongorestore --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" mongo_backup --gzip

覆盖恢复

遇到重复数据时删除后重新导入:

mongorestore --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" mongo_backup --gzip --drop

模拟执行

验证恢复操作而不实际执行:

mongorestore --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" mongo_backup --gzip --drop --dryRun

指定库恢复

恢复到指定数据库:

mongorestore --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" --dir=./mongo_backup/oldboy -d oldboy --drop --gzip

指定集合恢复

恢复到指定集合(数据格式必须是BSON):

mongorestore --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" --dir=./mongo_backup/oldboy/cook.bson -d oldboy -c cook --drop

数据格式转换

BSON转JSON工具

使用bsondump将BSON格式转换为JSON格式:

bsondump --outFile=cook.json cook.bson

mongoexport导出工具

JSON格式导出

导出指定集合为JSON格式:

mongoexport --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -d test -c user_info -o mongo_backup/test.user_info.json

CSV格式导出

导出为CSV格式并指定字段:

mongoexport --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -d test -c user_info --type=csv --fields=name,age,host -o mongo_backup/test.user_info.csv

mongoimport导入工具

JSON格式导入

从JSON格式恢复数据:

mongoimport --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -d test -c user_info mongo_backup/test.user_info.json --drop

CSV格式导入

从CSV格式恢复数据(使用headerline参数读取表头):

mongoimport --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" --type=csv --headerline -d test -c user_info mongo_backup/test.user_info.csv --drop

异构数据迁移实践

MySQL到MongoDB迁移

Step 1: MySQL导出CSV格式

select * from world.city into outfile '/var/lib/mysql/city.csv' fields terminated by ',';

Step 2: 手动添加CSV头部

ID,Name,CountryCode,District,Population

Step 3: MongoDB导入CSV数据

mongoimport --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" --type=csv --headerline -d world -c city /var/lib/mysql/city.csv --drop

CSV到Elasticsearch迁移

应用场景: 将CSV格式文件导入到Elasticsearch中

迁移流程:

csv --> mongo --> json --> es

操作步骤:

  1. CSV导入MongoDB:
mongoimport --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" --type=csv --headerline -d world -c city /var/lib/mysql/city.csv --drop
  1. MongoDB导出JSON:
mongoexport --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -d world -c city -o mongo_backup/world.city.json

迁移提示:MongoDB作为中间转换平台,可以很好地处理不同数据格式之间的转换,特别适合异构系统间的数据迁移。

备份策略建议

生产环境备份策略:

备份类型使用工具备份频率适用场景
全量备份mongodump --gzip每日/每周完整数据恢复
增量备份Oplog备份实时/每小时快速恢复
导出备份mongoexport按需数据分析、迁移

关键参数说明:

参数功能使用场景
--gzip压缩备份文件节省存储空间
--drop删除现有数据后导入完全替换数据
--dryRun模拟执行不实际操作验证操作正确性
--headerlineCSV文件包含表头CSV数据导入

更新: 2025-01-26