MongoDB的导入导出整理

MonogoDB导入导出操作分类

mongodump与mongoexport的区别:

  • mongodump导出的是bson格式是二进制形式,不过可以使用mongo自带的bsondump命令查看里面的数据,而mongoexport导出的则是文本,可以是csv、json格式。
    JSON可读性强但体积较大,BSON则是二进制文件,体积小但对人类几乎没有可读性。
  • 在一些mongodb版本之间,BSON格式可能会随版本不同而有所不同,所以不同版本之间用mongodump/mongorestore可能不会成功,具体要看版本之间的兼容性。当无法使用BSON进行跨版本的数据迁移的时候,使用JSON格式即mongoexport/mongoimport是一个可选项。跨版本的mongodump/mongorestore个人并不推荐,实在要做请先检查文档看两个版本是否兼容(大部分时候是的)。
  • JSON虽然具有较好的跨版本通用性,但其只保留了数据部分,不保留索引,账户等其他基础信息。使用时应该注意。

mongodump命令

  • 从系统命令行运行mongodump,而不是mongo shell。
  • mongodump仅在其备份数据中数据库中的文档,不包括索引数据。 所以mongorestore或mongod必须在恢复数据后重建索引。
  • mongodump在其输出中排除本地(local数据库)数据库的内容。

以下内容翻译自 mongodb官方手册 mongodump命令

mongodump备份哪里的数据

副本集模式

当命令行参数包括副本集名字(如下所示),那么mongodump会备份replSet 中的主节点信息

--host "replSet/rep1.example.net:27017,rep2.example.net:27017,rep3.example.net:27017"

当命令行参数不包含副本集名字,那么默认备份第一个节点的数据

--host "rep1.example.net:27017,rep2.example.net:27017,rep3.example.net:27017"
分片集群模式(每个分片又是副本集)
  • 对于分片群集, mongodump从群集中每个分片副本集上的主节点读取。

  • 对于没有分片处理的集合,每个数据库都有一个主分片(而其他分片上没有改数据库信息),那么mongodump就会从每个数据库的主分片上的主节点上去获取数据进行备份

mongodump的命令详情

mongodump -h IP --port 端口 -u 用户名 -p 密码 
--db <database>, -d <database> 需要备份的数据库
--collection <collection>, -c <collection> 需要备份的集合
--query <json>, -q <json> 筛选需要备份的数据 比如
--out <path>, -o <path> 限制备份数据的输出路径,默认在当前工作路径的dump路径上
--authenticationDatabase <dbname> 用户名认证的数据库,默认是admin数据库




--备份单个表
mongodump -u  superuser -p 123456  --port 27017 --authenticationDatabase admin -d myTest -c d -o /backup/mongodb/myTest_d_bak_201507021701.bak

--备份单个库
mongodump  -u  superuser -p 123456 --port 27017  --authenticationDatabase admin -d myTest -o  /backup/mongodb/

--备份所有库
mongodump  -u  superuser -p 123456 --authenticationDatabase admin  --port 27017 -o /root/bak 

--备份所有库推荐使用添加--oplog参数的命令,这样的备份是基于某一时间点的快照,只能用于备份全部库时才可用,单库和单表不适用:
mongodump -h 127.0.0.1 --port 27017   --oplog -o  /root/bak 
--同时,恢复时也要加上--oplogReplay参数,具体命令如下(下面是恢复单库的命令):
mongorestore  -d swrd --oplogReplay  /home/mongo/swrdbak/swrd/


-- 备份的product的集合中价格大于40元的记录 ,备份数据输出到c:\New folder\dump
mongodump --host 10.xx.xxx.xx:xxxx --db test --collection products --username abc --password uvw --query '{"price":"40"}' --authenticationDatabase test --out "c:\New folder\dump"





MongoStore命令

mongorestore程序将数据从mongodump创建的二进制数据库转储加载到mongod或mongos实例中。 从系统命令行运行mongorestore,而不是mongo shell。


--host <hostname1><:port>指定要恢复程序连接哪个mongod实例
--port <port>
--db <database>, -d <database> 需要恢复的数据库名字,如果数据库不存在,那么会创建,如果数据库已存在,会覆盖数据
--username
--password (when specifying the password as part of the URI connection string)
-authenticationDatabase <dbname> 鉴权数据库名字
--drop  在从转储的备份还原集合之前,备份文件中存在的集合会删除。 不会删除不在备份中的集合。
--恢复单个库:
mongorestore  -u  superuser -p 123456 --port 27017  --authenticationDatabase admin -d myTest   /backup/mongodb/

--恢复所有库:
mongorestore   -u  superuser -p 123456 --port 27017  --authenticationDatabase admin  /root/bak

--恢复单表
mongorestore -u  superuser -p 123456  --authenticationDatabase admin -d myTest -c d /backup/mongodb/myTest_d_bak_201507021701.bak/myTest/d.bson

MongoImport

mongoimport工具从mongoexport创建的扩展JSON,CSV或TSV导出中导入内容,或者可能导入另一个第三方导出工具。 从系统命令行运行mongoimport,而不是mongo shell。

命令的执行要求当前用户对数据库有readWrite权限;

导入命令要求在mongos或副本集主节点上执行。



--host
--port
--db
--username
--password (when specifying the password as part of the URI connection string)
--authenticationDatabase
--db <database>, -d <database> 指定需要导入的数据库名字
--collection <collection>, -c <collection> 指定需要导入的集合名字
--fields <field1[,field2]>, -f <field1[,field2]> 通过逗号隔开,指定需要导入的字段
--file <filename> 指定需要导入的文件位置
--drop	指定该选项,则导入前删除表
--mode	导入模式(当导入数据库中有和备份文件中相同的数据时的处理方式),有insert、upsert、merge,默认insert
upsert模式,会将已有数据替换;
merge模式,会将已有数据进行合并;
在多核的环境中,通过numInsertionWorkers可指定并发运行,可提升一定效率

mongoimport --host 127.0.0.1 --port 27017 -d appdb -c T_TEST_DATA_1 -u appuser -p appuser@2016 --numInsertionWorkers 50 --file export/T_TEST_DATA.json

MongoExport

mongoexport 支持将mongodb数据表导出为json或csv格式,可在导出时指定一定的查询条件实现过滤。

命令的执行要求当前用户对数据库有read权限;

在mongos或副本集上执行时,默认采用primary readperference选项,即优先从主库上读取。


常用命令格式
mongoexport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 -f 字段  --csv 
--fields <field1[,field2]>, -f <field1[,field2]> 指定需要导出的字段,以逗号隔开
--query <JSON>, -q <JSON> 导出条件
--out <file>, -o <file>    导出文件位置
--type <格式> 导出文件格式 可以是JSON ,CSV or
导出整张表
mongoexport -d tank -c users -o /home/zhangy/mongodb/tank/users.dat 
    
导出表中部分字段
mongoexport -d tank -c users --csv -f uid,name,sex -o tank/users.csv
    
根据条件敢出数据
mongoexport -d tank -c users -q '{uid:{$gt:1}}' -o tank/users.json

mongoexport --host 127.0.0.1 --port 27017 -d appdb -c T_TEST_DATA -u appuser -p appuser@2016 -o export/T_TEST_DATA.json

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值