视频地址:MongoDB 教程六: MongoDB管理:数据导入导出,数据备份恢复及用户安全与认证

MongoDB数据库备份与恢复

一、备份

先介绍下命令语法:

mongodump -h dbhost -d dbname -o dbdirectory

-h:MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017

-d:需要备份的数据库实例,例如:test

-o:备份的数据存放位置,例如:/data0/backup,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。

mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径

如果没有用户谁,可以去掉-u和-p。
如果导出本机的数据库,可以去掉-h。
如果是默认端口,可以去掉--port。
如果想导出所有数据库,可以去掉-d。

实例一:导出所有数据库

[root@localhost mongodb]# mongodump -h 127.0.0.1 -o /home/ikeepstudying/mongodb/
connected to: 127.0.0.1
Tue Dec  3 06:15:55.448 all dbs
Tue Dec  3 06:15:55.449 DATABASE: test     to     /home/ikeepstudying/mongodb/test
Tue Dec  3 06:15:55.449     test.system.indexes to /home/ikeepstudying/mongodb/test/system.indexes.bson
Tue Dec  3 06:15:55.450          1 objects
Tue Dec  3 06:15:55.450     test.posts to /home/ikeepstudying/mongodb/test/posts.bson
Tue Dec  3 06:15:55.480          0 objects

实例二:导出指定数据库

[root@localhost mongodb]# mongodump -h 192.168.1.108 -d tank -o /home/ikeepstudying/mongodb/
connected to: 192.168.1.108
Tue Dec  3 06:11:41.618 DATABASE: tank     to     /home/ikeepstudying/mongodb/tank
Tue Dec  3 06:11:41.623     tank.system.indexes to /home/ikeepstudying/mongodb/tank/system.indexes.bson
Tue Dec  3 06:11:41.623          2 objects
Tue Dec  3 06:11:41.623     tank.contact to /home/ikeepstudying/mongodb/tank/contact.bson
Tue Dec  3 06:11:41.669          2 objects
Tue Dec  3 06:11:41.670     Metadata for tank.contact to /home/ikeepstudying/mongodb/tank/contact.metadata.json
Tue Dec  3 06:11:41.670     tank.users to /home/ikeepstudying/mongodb/tank/users.bson
Tue Dec  3 06:11:41.685          2 objects
Tue Dec  3 06:11:41.685     Metadata for tank.users to /home/ikeepstudying/mongodb/tank/users.metadata.json

二、恢复

mongorestore -h dbhost -d dbname –directoryperdb dbdirectory

例如:mongorestore --directoryperdb /usr/ikeepstudying/gideon

-h:MongoDB所在服务器地址

-d:需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2

–directoryperdb:备份数据所在位置,例如:/data0/backup/test,这里为什么要多加一个test,而不是备份时候的backup,读者自己查看提示吧!

–drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!

mongorestore -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 --drop 文件存在路径

--drop的意思是,先删除所有的记录,然后恢复。

实例一:恢复所有数据库到mongodb中

[root@localhost mongodb]# mongorestore /home/ikeepstudying/mongodb/   #这里的路径是所有库的备份路径

实例二:还原指定的数据库

[root@localhost mongodb]# mongorestore -d tank /home/ikeepstudying/mongodb/tank/    #tank这个数据库的备份路径
[root@localhost mongodb]# mongorestore -d tank_new  /home/ikeepstudying/mongodb/tank/    #将tank还有tank_new数据库中

这二个命令,可以实现数据库的备份与还原,文件格式是json和bson的。无法指写到表备份或者还原。

导入导出MongoDB数据

因为这些工具主要通过和运行着的 mongod 实例交互操作,因此它们会影响运行着的数据库的性能。

这些过程对运行着的数据库实例不仅产生流量,而且也强制数据库通读所有内存数据。MongoDB不频繁的读取应用数据能够避免频繁访问数据而导致在数据库常规工作负载方面的性能恶化

参见

MongoDB备份方案 或者 MMS Backup Manual 介绍了更多在MongoDB实例备份方面的信息。此外,考虑以下参考MongoDB导入/导出工具:

  • mongoimport
  • mongoexport
  • mongorestore
  • mongodump

数据导入,导出,和备份操作

对于弹性和非破坏性的备份,使用文件系统或块级磁盘快照功能, 例如在文档 MongoDB备份方案 中描述的方法。 这里讨论的工具和操作所提供的功能在某些类型的备份情况下有用。

与此相反,为了保险起见,或者为了访问方便起见,用导入和导出工具来备份一个你的小数据集或移动数据到第三系统或从第三方系统移动数据进来。这些备份可以处理一个小但重要的数据集或者频繁更新的数据部分。

mongoimportmongoexport 并不能可靠地保存所有的富文本 BSON 数据类型,因为 JSON 仅能代表一种BSON支持的子集类型。因此,数据用这些工具导出导入或许会丢失一些精确程度。更多信息参考文档 MongoDB Extended JSON

不管你决定怎样导入导出数据,请考虑一下指导方针:

  • 标记文件,这样你能够区分导出或者备份的内容及导出或备份的时间点。

  • 如果备份过程会对生产线上系统有负面影响的话,不要创建或应用导出。

  • 确保它们反应数据的一致性状态。如果备份过程中不断更新的话,导出或备份过程可能影响数据的完整性与一致性。

  • 通过恢复(restoring)和导入(importing)测试备份与导出来确保备份有用。

人可理解的导入/导出格式

本章描述了用 JSONCSV 格式导入导出集合到文件的过程。

本章中的示例实用MongoDB tools mongoimportmongoexport 。这些工具或许对从第三方应用程序 导入数据到MongoDB数据库有用。

假如你想简单的从一个实例拷贝数据库到另一个实例的话,考虑用 copydb , clone, 或者 cloneCollection 命令。 这些命令或许更适合 上面的任务。 mongo shell 提供 db.copyDatabase() 方法。

mongoexport 导出集合

mongoimportmongoexport 并不能可靠地保存所有的富文本 BSON 数据类型,因为 JSON 仅能代表一种BSON支持的子集类型。因此,数据用这些工具导出导入或许会丢失一些精确程度。更多信息参考文档 MongoDB Extended JSON

通过用 mongoexport 你能创建备份文件。在最简单的掉用中该命令采用以下形式:

mongoexport --collection collection --out collection.json

这将导出在数据集 collection 中的所有文档到文件 collection.json. 如果没有输出参数 (i.e. “--out collection.json”), mongoexport 将写出处到标准输出 (i.e. “stdout”). 你可以进一步限制结果通过用 “--query” 提供查询过滤 和用 “--db” 限制结果到一个单独的数据库。例如:

mongoexport --db sales --collection contacts --query '{"field": 1}'

这个命令返回在``sales`` 数据库的 contacts 集合中的所有文档,和一个字段名为``field`` 值为 1. 两边用单引号查询确保它不予shell环境相互影响。结果文档将被返回在标准输出中。

默认情况下,mongoexport 每个MongoDB 文档返回一个 JSON document 。指定”--jsonArray” 参数作为一个单独 JSON 数组返回。用 “--csv” 文件 来返回CSV (comma separated values)格式的结果

假如你的 mongod 实例没有运行,你可以用”--dbpath” 选项来指定你的MongoDB实例的数据库文件的位置。参照下面的例子:

mongoexport --db sales --collection contacts --dbpath /srv/MongoDB/

这中方式直接读数据文件,锁定数据目录来避免冲突写。当你用这种配置来运行 mongoexportmongod 进程必须是没有运行的 并且没有连着这些数据文件

--host” 和 “--port“选项允许你指定非本地的主机来连接捕获输出,考虑下面的例子:

mongoexport --host mongodb1.example.net --port 37017 --username user --password pass --collection contacts --out mdb1-examplenet.json

你可以在任何 mongoexport 中向上边例子那样指定用户名密码凭据

mongoexport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 -f 字段 -q 条件导出 --csv -o 文件名

上面的参数好理解,重点说一下:

-f    导出指字段,以字号分割,-f name,email,age导出name,email,age这三个字段
-q    可以根查询条件导出,-q '{ "uid" : "100" }' 导出uid为100的数据
--csv 表示导出的文件格式为csv的,这个比较有用,因为大部分的关系型数据库都是支持csv,在这里有共同点

实例一:导出整张表

[root@localhost mongodb]# mongoexport -d tank -c users -o /home/ikeepstudying/mongodb/tank/users.dat
connected to: 127.0.0.1
exported 4 records

实例二:导出表中部分字段

[root@localhost mongodb]# mongoexport -d tank -c users --csv -f uid,name,sex -o tank/users.csv
connected to: 127.0.0.1
exported 4 records

实例三:根据条件敢出数据

[root@localhost mongodb]# mongoexport -d tank -c users -q '{uid:{$gt:1}}' -o tank/users.json
connected to: 127.0.0.1
exported 3 records

mongoimport 导入集合

mongoimportmongoexport 并不能可靠地保存所有的富文本 BSON 数据类型,因为 JSON 仅能代表一种BSON支持的子集类型。因此,数据用这些工具导出导入或许会丢失一些精确程度。更多信息参考文档 MongoDB Extended JSON

采取 mongoexport 的方式回复备份,大部分在 mongoexport 中的参数在 mongoimport 中也存在。考虑下面的命令:

mongoimport --collection collection --file collection.json

导入文件``collection.json``的内容到名为``collection``的集合中。如果你不用”--file“选项指定文件, :program:`mongoimport`将从标准输入 (e.g. “stdin.”)接受输入内容。

如果你指定”--upsert“选项,所有的:program:mongoimport 操作将尝试去更新在数据库中已经存在的文档和插入其他文档。这个选项将根据你的配置导致一些性能影响

你能指定数据库选项 --db 来导入这些文档到特定的数据库。如果你的MongoDB实例没用运行,用”--dbpath“选项指定你的MongoDB实例的数据库文件的地址。当你在这个配置中运行 mongoimport`时,考虑用":option:–journal <mongoimport –journal>`”选项来确保:program:`mongoimport`记录它的操作在journal中。``mongod``进程必须没有运行并且没有连接这些数据文件。

用”--ignoreBlanks“选项忽略空白字段。对:term:CSVTSV 导入,这个选项提在大部分示例中供需要的功能:它避免插入空白字段到MongoDB文档中。

实例一:还原导出的表数据

[root@localhost mongodb]# mongoimport -d tank -c users --upsert tank/users.dat
connected to: 127.0.0.1
Tue Dec  3 08:26:52.852 imported 4 objects

实例二:部分字段的表数据导入

[root@localhost mongodb]# mongoimport -d tank -c users  --upsertFields uid,name,sex  tank/users.dat
connected to: 127.0.0.1
Tue Dec  3 08:31:15.179 imported 4 objects

实例三:还原csv文件

[root@localhost mongodb]# mongoimport -d tank -c users --type csv --headerline --file tank/users.csv
connected to: 127.0.0.1
Tue Dec  3 08:37:21.961 imported 4 objects

原文/本文:MongoDB 教程六: MongoDB管理:数据导入导出,数据备份恢复及用户安全与认证

MongoDB 教程六: MongoDB管理:数据导入导出,数据备份恢复及用户安全与认证相关推荐

  1. 数据导入导出、备份恢复

    1.数据导入(文件内容导入数据库) 1.作用 :把文件系统的内容导入到数据库中 2.语法 load data infile "/var/lib/mysql-files/文件名" i ...

  2. 利用sqoop将hive数据导入导出数据到mysql

    http://niuzhenxin.iteye.com/blog/1726414 运行环境  centos 5.6   hadoop  hive sqoop是让hadoop技术支持的clouder公司 ...

  3. mysql将备份的数据导入_成功将MySQL的大型数据导入导出和备份(转载)

    原来的数据使用的是MySQL4.1,大概有800M左右.使用 mysqldump -u username -p dbname > "filename" 导出的时候很容易死掉, ...

  4. linux中mongo的导出数据,Linux下mongodb安装及数据导入导出教程(示例代码)

    Linux下mongodb安装及数据导入导出教程 #查看linux发行版本 cat /etc/issue #查看linux内核版本号 uname -r 一.Linux下mongodb安装的一般步骤 1 ...

  5. Linux下mongodb安装及数据导入导出教程

    Linux下mongodb安装及数据导入导出教程 #查看linux发行版本 cat /etc/issue #查看linux内核版本号 uname -r 一.Linux下mongodb安装的一般步骤 1 ...

  6. JAE京东云引擎Git上传管理代码教程和京东云数据库导入导出管理

    文章目录 Git管理准备工作 Git工具上传代码 发布代码装程序 mywebsql管理 京东云引擎小结 JAE京东云引擎是京东推出的支持Java.Ruby.Python.PHP.Node.js多语言. ...

  7. 开源OA协同办公平台搭建教程丨服务器端命令:数据导入导出及配置

    O2OA应用开发平台是一款开源办公产品,是使用JavaEE技术栈,分布式架构设计的真正全代码开源的企业应用定制化开发平台,平台既可以支持小企业的OA协同办公系统快速搭建,也能支持复杂的集团化大型协同门 ...

  8. K3金碟新建账套及基础数据导入导出教程

    K3金碟新建账套及基础数据导入导出教程

  9. Oracle使用数据泵导入/导出数据(expdp/impdp)【图文教程】

    Oracle使用数据泵导入/导出数据(expdp/impdp) 此类博客太多的坑,都不完整,要不执行着就报错执行不下去了,要不说的不清不楚,整理的一步步截图,100%成功. expdp数据导出 远程登 ...

最新文章

  1. Mysql性能优化二
  2. CPA、CPS、CPM、CPT、CPC 是什么
  3. 配置JDK时发生'javac'不是内部或外部命令的现象与解决过程
  4. unordered_map自定义key
  5. BugkuCTF-MISC题善用工具
  6. Java工作笔记-判断文件是否被正在被写入
  7. cdn是什么和作用有些
  8. python爬虫之app数据抓取实战_Python爬虫工程师必学——App数据抓取实战 ??
  9. Python配置CPLEX
  10. Tushare股票数据全生命周期MACD等指标动态获取计算-前复权
  11. pr使用中C盘空间变小
  12. 一位苦逼程序员的找工作经历
  13. 主谓宾定状补......
  14. Spring AOP 日志管理
  15. 解决Chorme使用google搜索结果无法打开的问题
  16. Google Code Search
  17. 移动互联网数据分析 移动客户端流量统计 移动客户端数据统计(一)
  18. 异步电动机的机械特性(转速/转矩-电流特性)
  19. 计算机二级小蒋是一位中学老师,计算机二级excel所有公式样稿.docx
  20. 海南省大数据管理局项目建设处刘雄:区块链技术在海南政务服务领域的典型应用

热门文章

  1. 图论 —— DAG 图的最长路
  2. 基础算法 —— 模拟思维
  3. 数论 —— 斐波那契数列(Fibonacci)
  4. 信息学奥赛C++语言: 数字方阵
  5. php 输出时间差,php输出时间差
  6. PyTorch:将模型转换为torch.jit.ScriptModule
  7. 浅谈opencl之错误码
  8. 02_Influxdb开启登录认证
  9. linux 修I改资源限制1024,Re:如何解决1024的限制???
  10. python合并两个文本文件内容_利用python自带插件合并多个excle文件内容