前言
MongoDB 的“整库导出”官方工具是 mongodump(逻辑备份,导出为 BSON + 元数据),它随 MongoDB 服务器一起安装,用法最简单也最常用。
导出
本机无认证
本机、无认证、默认端口 27017
1 | # 把 mydb 整库导出到当前目录下的 mydb_dump 文件夹 |
结果:1
2# 里面一堆 .bson 和 .metadata.json
cd /mydb_dump/yapi/
Docker中导出
这里容器名为yapi-mongo2
Docker中执行
1 | docker exec -it yapi-mongo2 mongodump -d yapi -o /tmp/mydb_dump |
复制到容器外
1 | mkdir -p /data/mongodb_bak |
删除容器内文件
1 | docker exec yapi-mongo2 rm -rf /tmp/mydb_dump/yapi |
远程有账号密码
远程、有账号密码、有认证库
1 | mongodump \ |
说明
--authenticationDatabase是“放用户名的库”,不是你要导出的库。- 密码里若有特殊字符,用 URI 形式更稳:
1
2
3mongodump \
--uri="mongodb://backupUser:YourPass@192.168.1.100:27017/mydb?authSource=admin" \
-o ./mydb_dump
查询压缩归档
只导集合、带查询条件、压缩归档
1 | # 只导出 orders 集合,status=1 的记录,并打成 gzip 压缩包 |
恢复时用 mongorestore --gzip --archive=orders_status1.gz …。
导出成人类可读的 JSON/CSV
如果你只想“看数据”而不是备份,用 mongoexport:
1 | # JSON |
注意:mongoexport 不支持所有 BSON 类型(如 undefined、DBRef、部分 Decimal128),正式备份请优先用 mongodump。
导入
普通导入
一键恢复(mongorestore)
1 | mongorestore \ |
- 目标库不存在会自动创建。
- 加上
--drop会先删集合再导入,防止主键冲突。
Docker中导入
Win
容器内创建文件夹
1 | docker exec docker-yapi-compose-mongo4-yapi-1 mkdir -p /tmp/mydb_dump/ |
复制文件到容器内
1 | docker cp C:\Users\DELL\Desktop\fsdownload\yapi docker-yapi-compose-mongo4-yapi-1:/tmp/mydb_dump/ |
导入
1 | docker exec -it docker-yapi-compose-mongo4-yapi-1 mongorestore --uri="mongodb://yapiuser:yapi123456@127.0.0.1:27017" -d yapi /tmp/mydb_dump/yapi |
Linux
容器内创建文件夹
1 | docker exec yapidockercompose_mongo4-yapi_1 mkdir -p /tmp/mydb_dump/ |
复制文件到容器内
1 | docker cp /data/mongodb_bak/yapi yapidockercompose_mongo4-yapi_1:/tmp/mydb_dump/ |
导入
1 | docker exec -it yapidockercompose_mongo4-yapi_1 mongorestore --uri="mongodb://yapiuser:yapi123456@127.0.0.1:27017" -d yapi /tmp/mydb_dump/yapi |
常见问题速查
| 现象 | 原因/解决 |
|---|---|
mongodump 命令找不到 |
没装 Database Tools;Linux 可 apt install mongodb-database-tools,Windows 去官网下 zip 并把 bin 目录加 PATH。 |
导出后 show dbs 大小不一致 |
mongodump 只导数据+索引定义,不预分配空空间,体积更小属正常。 |
| 想定时备份 | 把命令写进 crontab(Linux)或任务计划(Windows),加 --archive 直接打成 $(date +%F).gz 即可。 |