Mongodb导入导出数据
基础
Mongodb
的备份和还原主要分为二种。
- 针对于库的
mongodump
和mongorestore
- 针对库中表的
mongoexport
和mongoimport
官方文档:
如何选择
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