MongoDB实战篇:数据库备份与恢复/导出与导入

编写代码边撸猫 2018-05-07 15:12:31 ⋅ 641 阅读


*** 目录**

第一部分 备份数据
1.1 语法
1.2 参数
1.3 实例
第二部分 恢复数据
2.1 语法
2.2 参数
2.3 实例
第三部分 导出数据
3.1 语法
3.2 实例一[json格式]3.3 实例二[CVS格式]3.4 实例三[添加query]第四部分 导入数据
4.1 语法
4.2 参数
4.3 实例一[CVS格式]4.4 实例二[JSON格式]

第一部分 备份数据

在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。
mongodump命令可以通过参数指定导出的数据量级转存的服务器。

1.1 语法

mongodump命令脚本语法如下:

$ mongodump -h dbhost -d dbname -o dbdirectory
1.2 参数
1. -hMongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
2. -d:需要备份的数据库实例,例如:test
3. -o:备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。
1.3 实例
#只导出test数据库到桌面
$ sudo mongodump -h 127.0.0.1 -d test -o /Users/51testing/Desktop/ 2017-03-30T08:51:41.812+0800    writing test.numbers to 2017-03-30T08:51:41.812+0800    writing test.test2 to 2017-03-30T08:51:41.818+0800    writing test.users to 2017-03-30T08:51:41.819+0800    writing test.test1 to 2017-03-30T08:51:41.852+0800    done dumping test.test1 (3 documents) 2017-03-30T08:51:41.852+0800    done dumping test.users (4 documents) 2017-03-30T08:51:41.853+0800    done dumping test.test2 (100 documents) 2017-03-30T08:51:42.748+0800    done dumping test.numbers (200000 documents)

第二部分 恢复数据

2.1 语法
$ mongorestore -h <hostname><:port> -d dbname <path>
2.2 参数
--host <:port>, -h <:port>:MongoDB所在服务器地址,默认为: localhost:27017
--db , -d :需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
--drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!<path>:mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。你不能同时指定 <path> 和 --dir 选项,--dir也可以设置备份目录。
--dir:指定备份的目录,你不能同时指定 <path> 和 --dir 选项。
2.3 实例
$ mongorestore -d test1 --dir /Users/51testing/Desktop/test

注:
因为默认的是localhost:27071,没有改端口号

恢复之前

> show dbsadmin       0.000GBlocal       0.000GBshoppingdb  0.001GBtest        0.006GB

恢复之后

> show dbsadmin       0.000GBlocal       0.000GBshoppingdb  0.001GBtest        0.006GB#datasize不一致test1       0.002GB
为何datasize不一致?

因为mongo是增量数据库, 初始化时默认分配空间,之后再根据需求增加,因为之前操作过大量数据,所以会出现这样的结果.

第三部分 导出数据

MongoDB中的mongoexport工具可以把一个库中的collection导出成JSON格式CSV格式的文件。可以通过指定的内置参数导出数据项,当然导出的时候可以排序和指定条件。

查看mongo信息,安装位置/启动方法等

$ brew info mongo

mac 采用brew安装,位置/usr/local/Cellar/mongodb, 版本可能不同,依据查看的信息即可找到.

$ cd /usr/local/Cellar/mongodb/3.4.0/bin
$ ls 
bsondump    mongodump   mongoimport mongorestore    mongotop
mongo       mongoexport     mongooplog  mongos
mongod      mongofiles  mongoperf   mongostat

比如我们查看mongoexport的使用方法

#即可$ ./mongoexport --help....
3.1 语法
mongoexport -h dbhost -d dbname -c collectionName -o output
-h  arg     主机
--port arg  端口
-u  arg     用户名
-p  arg     密码
-d  arg     数据库
-c  arg     集合
-f  arg     字段名 逗号隔开
-q  arg     查询条件 json格式
--csv       导出csv格式
-o  arg     导出的文件名
3.2 实例一[json格式]

导出test数据库中的users集合,格式默认为json

$ mongoexport -d test -c users -o /Users/51testing/Desktop/users
2017-03-30T10:24:03.147+0800    connected to: localhost
2017-03-30T10:24:03.147+0800    exported 4 records

注意事项

can not use --fields when input type is JSON
3.3 实例二[csv格式]

如果我们需要导出CSV格式的数据,则需要使用–csv参数,具体如下所示:

CSV定义

CSV (逗号分隔值文件格式): 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。
纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。
CSV文件由任意数目的记录组成,记录间以某种换行符分隔;
每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。

导出test数据库中的users集合中的"name,age"字段, 中间不可有空格

$ mongoexport -d test -c users --type=csv -f "name,age" -o  /Users/51testing/Desktop/user_csv1

2017-03-30T10:40:19.909+0800    connected to: localhost
2017-03-30T10:40:19.909+0800    exported 4 records

脑洞🔛----怎么全部导出所有字段????

答案: 老实点, 一个个写吧.

3.4 实例三[添加query]

导出test数据库中的users集合中的"name,age"字段, 中间不可有空格, 并且只筛选age大于20的数据

BWF-huanghaowei:bin 51Code$ mongoexport -d test -c users --type=csv -f "name,age" -q '{age:{$gt: 20}}' -o  /Users/51testing/Desktop/user_csv2

2017-03-30T11:06:53.023+0800    connected to: localhost
2017-03-30T11:06:53.047+0800    exported 1 record

结果如下,满足以上的需求

name,age
lisi,29

第四部分 导入数据

4.1 语法

Import CSV, TSV or JSON data into MongoDB

mongoimport <options> <file>
4.2 参数
-d 数据库名
-c collection名
--type 导入的格式,默认json
-f 导入的字段名
--headerline 如果导入的格式是csv,则可以使用第一行的标题作为导入的字段
--file 要导入的文件
4.3 实例一[导入CSV]

将桌面上备份的数据(csv)[name,age]导入进--数据库improtdb中的集合importCol.
默认的导入格式为json

$ mongoimport -d improtdb -c importCol  --fields  name,age --file /Users/51testing/Desktop/user_csv1 --type csv
2017-03-30T13:08:26.524+0800    connected to: localhost
2017-03-30T13:08:26.606+0800    imported 4 documents

终端中cmd + T开启新的标签, 进一步可以验证

> show dbs> db.表名.find()
4.4 实例二[导入json]

导入json数据时不需要设置fields字段,

$ mongoimport -d importJDB -c users --file /Users/51testing/Desktop/users 

2017-03-30T13:44:44.166+0800    connected to: localhost
2017-03-30T13:44:44.295+0800    imported 4 documents


关注我们

如果需要源码可以关注“IT实战联盟”公众号并留言(源码名称+邮箱),小萌看到后会联系作者发送到邮箱,也可以加入交流群和作者互撩哦~~~!


全部评论: 0

    我有话说:

    MongoDB实战:高级查询----$elemMatchaggregate

    基本的Find查询将在其他章节示例,本文主要针对于遇到的问题解决的方法做个记录,希望可以减少遇到这类问题的

    MongoDB系列---数据类型/插入文档(三)

    第一部分 BJSON JSON MongoDB的文档JavaScript中的对象很相似,JavaScript中的数据交互格式是JSON格式. JSON的数据格式: 1. null;2. 布尔

    MongoDB 数据库的基本操作(二)

    MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

    MongoDB系列之----概述(一)

    MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

    「开源资讯」MyExcel 3.3.0.GA 发布,终于支持图片导入

    MyExcel,是一个集导入导出、加密Excel等多项功能的Java工具包。

    MongoDB更新(五)

    如果数据库中尚未有数据, 准备测试数据db.test1.insertMany([    {"name": "zhangsan", "age": 19, "score": [90

    MongoDB 查询文档(五)

    第一部分 前期准备1.1 插入测试数据db.test1.insertMany

    MongoDB 更新/删除文档(四)

    更新文档文档存入数据库之后,就可以采用Update来修改它的内容,db.collection.up

    MongoDB 更新/删除文档(四)

    第一部分 更新文档 文档存入数据库之后,就可以采用Update来修改它的内容, db.collection.update( #查询条件   <query>, #修改器

    前端实战:通过JS抓取城市所有站点线路

    做公交线路定位,木有数据怎么办?网上抓去~ 手把手教你通过JS实现站点线路数据抓取

    线性表 - 栈队列

    1.栈 1.栈(stack)是限定仅在表尾进行插入和删除操作的线性表,(先进后出) 2.我们把允许插入和删除的一端成为栈顶(top) 另一端称为栈底(bottom),不含任何数据元素的栈称为空栈

    您应该避免的五个简单的数据库设计错误

    Anith 在他非常成功的文章 Facts and Fallacies about First Normal Form 之后,对五个常见的数据库设计错误进行了引人入胜的讨论,尽管使用它们的不幸后果

    MongoHelper 0.2.5 发布,Spring-Data-MongoDB 增强工具包

    工具包简化 CRUD 操作,并且提供了类 jpa 的数据库操作。

    FreeFileSync 11.3 发布,文件夹比较同步软件

    FreeFileSync 11.3 已发布。这是一个文件夹比较和同步软件,可以创建和管理所有重要文件的备份副本。FreeFileSync 不是每次都复制每个文件,而是确定源文件夹目标文件夹之间的

    FreeFileSync 11.4 发布,文件夹比较同步软件

    FreeFileSync 11.4 已发布。这是一个文件夹比较和同步软件,可以创建和管理所有重要文件的备份副本.FreeFileSync 不是每次都复制每个文件,而是确定源文件夹目标文件夹之间的

    FreeFileSync 11.5 发布,文件夹比较同步软件

    FreeFileSync 11.5 已发布。这是一个文件夹比较和同步软件,可以创建和管理所有重要文件的备份副本.FreeFileSync 不是每次都复制每个文件,而是确定源文件夹目标文件夹之间的

    JAVA实现附近范围内公交定位问题

    接上【前端实战:通过JS抓取城市所有站点线路】获取附近定位信息

    「免费」千万级电商高并发秒杀实战

    IT老齐 16年Java研发架构设计经验、前京东金融架构师、中国财政部数据平台架构师、专注送给小白的实战课、只为高薪而生、重实战,说人话,讲干货,不扯淡!

    Apache Beam 2.25.0 发布,大数据流处理批处理编程范式

    Apache Beam 2.25.0 发布了。Beam 是一个用于定义和执行数据处理管道的统一编程模型,包括 ETL、批处理流处理。Beam 项目重点在于数据处理的编程范式和接口定义,并不涉及具体