如何使用mongoexport批量导出MongoDB全部数据库及集合?
解决方案
mongoexport 本身仅支持单次导出单个集合,没有内置的批量导出所有数据库、所有集合的参数,你可以通过脚本结合MongoDB内置的元数据查询实现批量导出;另外如果你的备份只是用于MongoDB实例间的恢复,更推荐使用原生的全量备份工具mongodump,性能和完整性都更好。
方案1:使用Shell脚本批量调用mongoexport导出所有数据
如果你的场景需要导出JSON/CSV格式的可读文件,可通过以下脚本实现全量导出:
- 首先通过
mongosh命令获取实例下所有数据库名,过滤掉admin、local、config等不需要备份的系统库 - 遍历每个数据库,查询该库下所有集合名
- 对每个集合调用
mongoexport,按库名+集合名的规则命名导出文件,方便后续恢复
示例脚本如下,可根据你的MongoDB连接配置修改参数:
#!/bin/bash # MongoDB连接配置,按需修改 MONGO_HOST="127.0.0.1" MONGO_PORT="27017" MONGO_USER="你的用户名" MONGO_PASS="你的密码" EXPORT_DIR="./mongo_all_export" mkdir -p $EXPORT_DIR # 获取所有非系统数据库名 databases=$(mongosh --host $MONGO_HOST --port $MONGO_PORT -u $MONGO_USER -p $MONGO_PASS --authenticationDatabase admin --quiet --eval "db.adminCommand('listDatabases').databases.map(d => d.name).filter(name => !['admin','local','config'].includes(name)).join(' ')" ) for db in $databases; do echo "正在导出数据库:$db" mkdir -p "$EXPORT_DIR/$db" # 获取当前库下所有集合名 collections=$(mongosh --host $MONGO_HOST --port $MONGO_PORT -u $MONGO_USER -p $MONGO_PASS --authenticationDatabase admin $db --quiet --eval "db.getCollectionNames().join(' ')" ) for coll in $collections; do echo "导出集合:$db.$coll" mongoexport --host $MONGO_HOST --port $MONGO_PORT -u $MONGO_USER -p $MONGO_PASS --authenticationDatabase admin \ --db $db --collection $coll \ --out "$EXPORT_DIR/$db/$coll.json" # 如果需要导出CSV格式,加上--type=csv --fields=字段名1,字段名2 参数即可 done done
如果你的MongoDB实例没有开启权限验证,去掉命令里的-u、-p、--authenticationDatabase参数即可。
方案2:使用mongodump做全量备份(更适合纯备份恢复场景)
mongodump是MongoDB官方提供的全量备份工具,默认直接导出所有数据库、所有集合的BSON格式数据,备份和恢复速度远快于mongoexport导出JSON的方案,适合不需要人工读取导出文件、只用于实例恢复的场景。
- 最简单的全量备份命令:
mongodump --host 127.0.0.1 --port 27017 -u 用户名 -p 密码 --authenticationDatabase admin -o ./mongo_all_backup
- 恢复时直接使用
mongorestore命令指向备份目录即可批量恢复所有库和集合:
mongorestore --host 127.0.0.1 --port 27017 -u 用户名 -p 密码 --authenticationDatabase admin ./mongo_all_backup
内容的提问来源于stack exchange,提问作者Taner Tunçer
相关产品推荐
相关产品推荐

