Mongodb导入导出数据

Mongodb导入导出数据

基础

Mongodb的备份和还原主要分为二种。

  • 针对于库的mongodumpmongorestore
  • 针对库中表的mongoexportmongoimport

官方文档

如何选择

mongodump/mongorestore mongoexport/mongoimport
导入导出二进制数据,不可读 导出导入JSON数据,人类可读
恢复时仅插入不更新 使用--mode决定行为
二进制数据BSON 仅支持UTF-8编码的JSON/CSV
更适合进行数据库级备份 更适合进行文档级备份
可以支持和保留所有的类型的数据 无法支持和保留所有的类型的数据,因为JSON是BSON的子集
导入导出较快,导出文件较小 导入导出较慢,导出文件较大
可以保证数据一致性(--oplog) 不能保证数据一致性

命令

通用选项

参数 说明
-h 数据库的IP地址
--port 数据库的端口,默认27017
-u 用户名
-p 用户密码
-d 指定数据库,如果省略则导出所有数据库
-o 导出文件的存放路径
--quiet 限制输出
--uri 连接字符串
Transact-SQL
URI格式 mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

mongodump

参数 说明
--dumpDbUsersAndRoles 仅限与--db 一起使用。导出数据库是同时导出用户和角色定义。
Bash
# 备份所有数据库
mongodump -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd -o /tmp/ 

# 备份所有数据库和oplog
mongodump -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd --oplog -o /tmp/ 

# 备份所有数据库和oplog并进行压缩
mongodump -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd --oplog --gzip  -o /tmp/ 

# 使用uri地址
mongodump --uri="mongodb://root:pwd@127.0.0.1:27017/" --oplog -o /tmp/ 

# 备份指定数据库
mongodump -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd -d DATABASE -o /tmp/ 

# 备份指定集合
mongodump -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd -d DATABASE -c TABLE -o /tmp/ 

# 备份这个数据库,但是去除部分集合
mongodump -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p PWD -d DB --excludeCollection=TABLE1 --excludeCollection=TABLE2 -o /tmp/

# 备份整个数据库到指定的文件
mongodump -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd  --archive=/tmp/data.bak

mongorestore

Bash
# 恢复所有数据到数据库
mongorestore -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd /tmp/dump

# 恢复所有数据到数据库,并使用oplog
mongorestore -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd --oplogReplay /tmp/dump

# 恢复单表数据到指定数据库 test
mongorestore -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd -d test /tmp/dump/test/table.bson

# 恢复单表数据到指定数据库 db_new , 指定集合 table_new
mongorestore -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd -d db_new -c table_new /tmp/dump/db/table.bson

# 恢复数据到数据库,但过滤掉部分表
mongorestore -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd --nsExclude="db.ta*" /tmp/dump/

# 恢复数据到数据库,只恢复部分表 db.ta*,通常于单库单表的恢复
mongorestore -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd --nsInclude="db.ta*" /tmp/dump/

# 恢复数据到数据库,将 db.ta* 集合,恢复到 db_new.ta* 集合中
mongorestore -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd --nsFrom="db.ta*" --nsTo="db_new.ta*" /tmp/dump/

# 从备份文件进行恢复,同时恢复后库名为db_new
mongorestore -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd --archive=/tmp/dump/mongo.bak --nsFrom='db.*' --nsTo='db_new.*'

# 从压缩文件或目录中恢复
mongorestore -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd --gzip /tmp/dump

mongoexport

Bash
# 备份一个集合
mongoexport -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd -d db -c table -o /tmp/export/table.json

# 备份集合,存储为csv格式(需要指定导出列)
mongoexport -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd -d db -c table --type csv --fields id,name -o /tmp/export/table.csv

# 备份集合,存储为csv,使用--noHeaderLine 进行不显示字段名
mongoexport -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd -d db -c table --type csv --fields id,name --noHeaderLine -o /tmp/export/table.csv

# 以uri信息连接数据库,导出数据
mongoexport --uri="mongodb://root:pwd@127.0.0.1:27017/db?authsource=admin" -c table -o /tmp/export/table.json

#  以过滤条件导出数据
mongoexport -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd -d db -c table -q='{"id":{"$gte":10}}' -o /tmp/export/table.json

# 限制导出条数
mongoexport -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd -d db -c table -q='{"id":{"$gte":10}}' --limit=10 -o /tmp/export/table.json

mongoimport

Bash
# 将 table.json 文件导入到 db库,table集合中
mongoimport -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd -d db -c table /tmp/export/table.json

# 将 table.json 文件导入到 db库,table集合中,如遇到冲突则覆盖
mongoimport -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd -d db -c table --mode=upsert /tmp/export/table.json

# 将 table.json 文件导入到 db库,table_csv集合中,导入时必须指定列名称
# 如果文件第一行是列名称,也会被当作数据处理插入到数据库中
mongoimport -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd -d db -c table_csv --type=csv --fields=id,name /tmp/export/table.json

# 将 table.json 文件导入到 db库,table_csv集合中
# 使用 --headerline 参数,将csv文件的第一行做为字段名称
mongoimport -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd -d db -c table_csv --type=csv --headerline /tmp/export/table.json

# 导入数据时候不使用 -c,会使用文件名做为集合名, 导入后集合名称为 table
mongoimport -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd -d db --type=csv --headerline /tmp/export/table.csv

# 导入数据时,指定字段类型进行导入 (注意:csv文件第一行不要有字段名称)
mongoimport -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p pwd -d db -c table --type=csv --columnsHaveTypes --fields="id.int32(),name.string()" /tmp/export/table.csv
qrcode

创建时间:2023-03-31 06:13:59

最后修改:2023-05-27 01:43:47