MongoDB数据库导出与导入

前言

MongoDB 的“整库导出”官方工具是 mongodump(逻辑备份,导出为 BSON + 元数据),它随 MongoDB 服务器一起安装,用法最简单也最常用。

导出

本机无认证

本机、无认证、默认端口 27017

1
2
# 把 mydb 整库导出到当前目录下的 mydb_dump 文件夹
mongodump -d yapi -o /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
2
3
mkdir -p /data/mongodb_bak
docker cp yapi-mongo2:/tmp/mydb_dump/yapi /data/mongodb_bak/
cd /data/mongodb_bak/yapi

删除容器内文件

1
docker exec yapi-mongo2 rm -rf /tmp/mydb_dump/yapi

远程有账号密码

远程、有账号密码、有认证库

1
2
3
4
5
mongodump \
--host 192.168.1.100 --port 27017 \
-u backupUser -p 'YourPass' --authenticationDatabase admin \
-d mydb \
-o ./mydb_dump

说明

  • --authenticationDatabase 是“放用户名的库”,不是你要导出的库。
  • 密码里若有特殊字符,用 URI 形式更稳:
    1
    2
    3
    mongodump \
    --uri="mongodb://backupUser:YourPass@192.168.1.100:27017/mydb?authSource=admin" \
    -o ./mydb_dump

查询压缩归档

只导集合、带查询条件、压缩归档

1
2
3
4
5
6
7
# 只导出 orders 集合,status=1 的记录,并打成 gzip 压缩包
mongodump \
--uri="mongodb://backupUser:YourPass@192.168.1.100:27017/mydb?authSource=admin" \
-c orders \
-q '{status:1}' \
--gzip \
--archive=orders_status1.gz

恢复时用 mongorestore --gzip --archive=orders_status1.gz …

导出成人类可读的 JSON/CSV

如果你只想“看数据”而不是备份,用 mongoexport

1
2
3
4
5
6
7
8
# JSON
mongoexport -d mydb -c users -o users.json

# CSV(必须显式指定字段)
mongoexport -d mydb -c users \
--type=csv \
-f _id,name,email \
-o users.csv

注意:mongoexport 不支持所有 BSON 类型(如 undefined、DBRef、部分 Decimal128),正式备份请优先用 mongodump。

导入

普通导入

一键恢复(mongorestore)

1
2
3
4
mongorestore \
--uri="mongodb://backupUser:YourPass@192.168.1.100:27017/?authSource=admin" \
-d mydb \
./mydb_dump/mydb
  • 目标库不存在会自动创建。
  • 加上 --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 即可。