- Administration >
- 管理概念 >
- Operational Strategies >
- 导入导出MongoDB数据
导入导出MongoDB数据¶
本文概述了MongoDB发行版的导入导出程序 这些工具在你想要备份或者导出一部分你的数据而不需要获取整个数据库状态或者简单的数据获取情况下很有用。对于更复杂的数据迁移惹怒,你或许想用一个客户端 driver 和数据库交互来写你的导入导出脚本。 对于灾难恢复保护和日常数据备份,利用完整的文档 database instance backups.
警告
因为这些工具主要通过和运行着的 mongod 实例交互操作,因此它们会影响运行着的数据库的性能。
这些过程对运行着的数据库实例不仅产生流量,而且也强制数据库通读所有内存数据。MongoDB不频繁的读取应用数据能够避免频繁访问数据而导致在数据库常规工作负载方面的性能恶化
参见
MongoDB备份方案 或者 MMS Backup Manual 介绍了更多在MongoDB实例备份方面的信息。此外,考虑以下参考MongoDB导入/导出工具:
数据导入,导出,和备份操作¶
对于弹性和非破坏性的备份,使用文件系统或块级磁盘快照功能, 例如在文档 MongoDB备份方案 中描述的方法。 这里讨论的工具和操作所提供的功能在某些类型的备份情况下有用。
与此相反,为了保险起见,或者为了访问方便起见,用导入和导出工具来备份一个你的小数据集或移动数据到第三系统或从第三方系统移动数据进来。这些备份可以处理一个小但重要的数据集或者频繁更新的数据部分。
警告
mongoimport 和 mongoexport 并不能可靠地保存所有的富文本 BSON 数据类型,因为 JSON 仅能代表一种BSON支持的子集类型。因此,数据用这些工具导出导入或许会丢失一些精确程度。更多信息参考文档 MongoDB Extended JSON
不管你决定怎样导入导出数据,请考虑一下指导方针:
标记文件,这样你能够区分导出或者备份的内容及导出或备份的时间点。
如果备份过程会对生产线上系统有负面影响的话,不要创建或应用导出。
确保它们反应数据的一致性状态。如果备份过程中不断更新的话,导出或备份过程可能影响数据的完整性与一致性。
通过恢复(restoring)和导入(importing)测试备份与导出来确保备份有用。
人可理解的导入/导出格式¶
本章描述了用 JSON 或 CSV 格式导入导出集合到文件的过程。
本章中的示例实用MongoDB tools mongoimport 和 mongoexport 。这些工具或许对从第三方应用程序 导入数据到MongoDB数据库有用。
假如你想简单的从一个实例拷贝数据库到另一个实例的话,考虑用 copydb , clone, 或者 cloneCollection 命令。 这些命令或许更适合 上面的任务。 mongo shell 提供 db.copyDatabase() 方法。
用 mongoexport 导出集合¶
警告
mongoimport 和 mongoexport 并不能可靠地保存所有的富文本 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/
这中方式直接读数据文件,锁定数据目录来避免冲突写。当你用这种配置来运行 mongoexport 时 mongod 进程必须是没有运行的 并且没有连着这些数据文件
“--host” 和 “--port“选项允许你指定非本地的主机来连接捕获输出,考虑下面的例子:
mongoexport --host mongodb1.example.net --port 37017 --username user --password pass --collection contacts --out mdb1-examplenet.json
你可以在任何 mongoexport 中向上边例子那样指定用户名密码凭据
用 mongoimport 导入集合¶
警告
mongoimport 和 mongoexport 并不能可靠地保存所有的富文本 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:CSV 和 TSV 导入,这个选项提在大部分示例中供需要的功能:它避免插入空白字段到MongoDB文档中。