一、概述
本指南介绍如何在 MongoDB 4 环境中使用命令行工具进行数据导入与导出,包括:
- mongodump / mongorestore(适用于 BSON 全量备份恢复)
- mongoexport / mongoimport(适用于 JSON/CSV 数据导入导出)
适用于日常运维、数据迁移、备份恢复等场景。
二、工具说明
| 工具 | 用途 |
|---|---|
| mongodump | 导出数据库(BSON格式) |
| mongorestore | 导入数据库(BSON格式) |
| mongoexport | 导出集合(JSON/CSV) |
| mongoimport | 导入集合(JSON/CSV) |
三、mongodump(导出)
1. 导出整个数据库
mongodump -h 127.0.0.1 -P 27017 -u username -p password --authenticationDatabase admin -d test -o /data/backup/
说明:
- -d:指定数据库
- -o:导出目录
2. 导出指定集合
mongodump -h 127.0.0.1 -d test -c users -o /data/backup/
3. 导出所有数据库
mongodump -h 127.0.0.1 -o /data/backup_all/
4. 压缩导出(推荐)
mongodump -h 127.0.0.1 -d test --archive=/data/backup.gz --gzip
四、mongorestore(导入)
1. 恢复整个数据库
mongorestore -h 127.0.0.1 -P 27017 -u username -p password --authenticationDatabase admin -d test /data/backup/test
2. 恢复指定集合
mongorestore -d test -c users /data/backup/test/users.bson
3. 覆盖原数据(危险操作)
mongorestore --drop -d test /data/backup/test
说明:
- –drop:恢复前删除原集合
4. 从压缩文件恢复
mongorestore --archive=/data/backup.gz --gzip
五、mongoexport(导出 JSON/CSV)
1. 导出为 JSON
mongoexport -h 127.0.0.1 -d test -c users -o users.json
2. 导出为 CSV
mongoexport -d test -c users --type=csv -f name,age,email -o users.csv
说明:
- -f:指定字段
3. 条件导出
mongoexport -d test -c users -q '{"age": {"$gt": 30}}' -o users.json
六、mongoimport(导入 JSON/CSV)
1. 导入 JSON
mongoimport -d test -c users --file users.json
2. 导入 CSV
mongoimport -d test -c users --type=csv --headerline --file users.csv
3. 覆盖导入
mongoimport -d test -c users --drop --file users.json
4. 批量模式(高性能)
mongoimport -d test -c users --file users.json --numInsertionWorkers 4
七、认证参数说明
-u 用户名 -p 密码 --authenticationDatabase admin
示例:
mongodump -h 127.0.0.1 -u root -p 123456 --authenticationDatabase admin -d test -o /backup
八、常见问题
1. 认证失败
检查:
- 用户名密码是否正确
- 是否指定 authenticationDatabase
2. 字符编码问题
建议统一使用 UTF-8:
export LANG=en_US.UTF-8
3. 性能优化建议
- 使用 –gzip 压缩
- 使用 –numParallelCollections(mongodump)
- 使用 –numInsertionWorkers(mongoimport)
九、生产建议
- 定期备份(cron + mongodump)
- 保留多版本备份
- 测试恢复流程
- 使用压缩减少存储
十、示例:定时备份脚本
#!/bin/bash
DATE=$(date +%F)
BACKUP_DIR="/data/mongo_backup/$DATE"
mkdir -p $BACKUP_DIR
mongodump -h 127.0.0.1 -u root -p 123456 \
--authenticationDatabase admin \
--gzip --archive=$BACKUP_DIR/backup.gz
# 删除7天前备份
find /data/mongo_backup/ -mtime +7 -exec rm -rf {} \;
总结
- 全量备份:mongodump / mongorestore
- 数据交换:mongoexport / mongoimport
- 推荐:压缩 + 定时任务 + 多副本备份