第5章 MongoDB备份与恢复
备份恢复工具概述
MongoDB提供了多种备份和恢复工具,适用于不同的应用场景和数据格式需求。
主要工具分类:
工具组合 | 数据格式 | 主要用途 |
---|---|---|
mongodump/mongorestore | BSON + GZIP | 定时备份,全量备份 |
mongoexport/mongoimport | JSON/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
操作步骤:
- 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
- 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 | 模拟执行不实际操作 | 验证操作正确性 |
--headerline | CSV文件包含表头 | CSV数据导入 |
更新: 2025-01-26