CentOS 7安装MongoDB终极指南:从入门到精通

引言

MongoDB是一种面向文档的数据库,它是免费且开源的。它被归类为NoSQL数据库,因为它不依赖于传统的基于表的关系型数据库结构。相反,它使用具有动态模式的类似JSON的文档。与关系数据库不同,MongoDB在将数据添加到数据库之前不需要预定义模式。您可以随时根据需要更改模式,而无需设置具有更新模式的新数据库。

在本教程中,您将在CentOS 7服务器上安装MongoDB社区版。

先决条件

在按照本教程之前,请确保您拥有:

  • 一台CentOS 7服务器,并拥有一个非root但具备sudo权限的用户。如需指导,请参阅我们的教程:CentOS 7初始服务器设置

步骤1 – 添加MongoDB源

CentOS的默认仓库中没有mongodb-org软件包。然而,MongoDB维护了一个专用的仓库。让我们将其添加到我们的服务器上。

使用vi编辑器,为CentOS的软件包管理工具yum创建一个.repo文件。

  1. sudo vi /etc/yum.repos.d/mongodb-org.repo

然后,访问MongoDB文档中的“在Red Hat上安装”部分,并将最新稳定版本的仓库信息添加到文件中。

/etc/yum.repos.d/mongodb-org.repo
[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc

通过按下ESC键保存对文件的更改,然后输入:wq,并按下回车。

在继续之前,您应该验证MongoDB仓库是否存在于yum工具中。repolist命令会显示已启用的仓库列表。

  1. yum repolist
输出示例...
repo id repo name base/7/x86_64 CentOS-7 - Base extras/7/x86_64 CentOS-7 - Extras mongodb-org-6.0/7/x86_64 MongoDB Repository updates/7/x86_64 CentOS-7 - Updates . . .

在安装了MongoDB存储库后,您可以继续进行安装。

步骤2 – 安装MongoDB

您可以使用yum工具从第三方仓库安装mongodb-org软件包。

  1. sudo yum install mongodb-org

会有两个“这样可以吗 [y/N]?”的提示。第一个提示允许安装MongoDB软件包,第二个提示导入一个GPG密钥。MongoDB的发布商会对他们的软件进行签名,而yum会使用密钥来确认下载的软件包的完整性。在每个提示出现时,输入Y并按下回车键。

接下来,使用systemctl工具启动MongoDB服务。

  1. sudo systemctl start mongod

尽管在本教程中我们不会使用它们,但您也可以使用reloadstop命令修改MongoDB服务的状态。

reload命令表示请求mongod进程读取配置文件“/etc/mongod.conf”,并应用任何修改,无需重新启动。

  1. sudo systemctl reload mongod

stop命令将停止所有正在运行的mongod进程。

  1. sudo systemctl stop mongod

执行启动命令后,systemctl实用工具未提供任何结果,但您可以通过使用tail命令查看mongod.log文件的末尾,来检查服务是否已启动。

  1. sudo tail /var/log/mongodb/mongod.log
输出示例...
[initandlisten] waiting for connections on port 27017

“等待连接”的输出确认了MongoDB的成功启动,您可以使用MongoDB Shell访问数据库服务器。

  1. mongo

注意:当您启动MongoDB Shell时,您可能会看到如下警告:

**警告**:软资源限制太低。资源限制被设置为 4096 个进程,64000 个文件。进程数量应至少是文件数量的一半,即32000个。

MongoDB是一个多线程应用程序。它可以启动额外的进程来处理工作负载。该警告指出,为了使MongoDB最有效,它可以启动的进程数量应为其同时能打开的文件数量的一半。为了解决这个警告,您需要通过编辑20-nproc.conf文件来修改mongod的进程软资源限制值:

sudo vi /etc/security/limits.d/20-nproc.conf

在文件末尾添加以下行:

/etc/security/limits.d/20-nproc.conf

...
mongod soft nproc 32000

确保保存更改,按ESC键,然后输入:wq,接着按ENTER键。

为了使新的限制对MongoDB有效,请使用systemctl实用程序重新启动它:

sudo systemctl restart mongod

之后,当您连接到MongoDB Shell时,该警告应该不再存在。

为了学习如何在shell中与MongoDB进行交互,您可以查看db.help()方法的输出,该方法提供了db对象的方法列表。

  1. db.help()
输出示例...
DB methods: db.adminCommand(nameOrDocument) - switches to 'admin' db, and runs command [ just calls db.runCommand(...) ] db.auth(username, password) db.cloneDatabase(fromhost) db.commandHelp(name) returns the help for the command db.copyDatabase(fromdb, todb, fromhost) db.createCollection(name, { size : ..., capped : ..., max : ... } ) db.createUser(userDocument) db.currentOp() displays currently executing operations in the db db.dropDatabase() . . .

mongod进程在后台运行,但通过exit命令退出shell。

  1. exit
输出示例...
Bye

步骤3 – 验证启动

由于数据库驱动的应用程序无法在没有数据库的情况下正常工作,因此我们将确保MongoDB守护进程(mongod)会随系统启动。

使用 systemctl 工具检查 MongoDB 的启动状态。

  1. systemctl is-enabled mongod; echo $?

输出为 0 表示守护进程已启用,这是我们期望的结果。然而,如果输出为 1 则表示守护进程被禁用,它将不会自动启动。

输出...
enabled
0

当守护进程不可用时,请使用 systemctl 工具启用它。

  1. sudo systemctl enable mongod

现在您已经拥有一个正在运行的 MongoDB 实例,它将在系统重启后自动启动。

步骤 4 – 导入示例数据集(可选)

与其他数据库服务器不同,MongoDB 的测试数据库中默认没有数据。由于我们不希望使用生产数据来尝试新软件,因此我们将从 MongoDB 示例中下载一个样本数据集。这个 JSON 文档包含了一系列餐厅信息,我们将用它来练习与 MongoDB 的交互,以避免对敏感数据造成损害。

首先进入一个可写入的目录:

  1. cd /tmp

使用 curl 命令和 MongoDB 链接下载 JSON 文件。

  1. curl -LO https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json

mongoimport 命令将数据插入到 test 数据库中。--db 标志定义要使用的数据库,--collection 标志指定将信息存储在数据库中的位置,--file 标志告诉命令要在哪个文件上执行导入操作。

  1. mongoimport --db test --collection restaurants --file /tmp/primer-dataset.json

输出确认了从 primer-dataset.json 文件中导入数据。

输出
connected to: localhost
imported 25359 documents

有了样本数据集,您就可以对其进行查询。

启动 MongoDB Shell。

  1. mongo

默认情况下,shell 会选择 test 数据库,这就是您导入数据的地方。

使用 find() 方法查询 restaurants 集合,以显示数据集中的所有餐厅列表。由于集合中包含超过 25,000 个条目,使用可选的 limit() 方法将查询的输出结果限制为指定数量。此外,pretty() 方法可通过新行和缩进使信息更易读。

  1. db.restaurants.find().limit(1).pretty()
输出
{
"_id" : ObjectId("57e0443b46af7966d1c8fa68"),
"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
},
{
"date" : ISODate("2013-09-11T00:00:00Z"),
"grade" : "A",
"score" : 6
},
{
"date" : ISODate("2013-01-24T00:00:00Z"),
"grade" : "A",
"score" : 10
},
{
"date" : ISODate("2011-11-23T00:00:00Z"),
"grade" : "A",
"score" : 9
},
{
"date" : ISODate("2011-03-10T00:00:00Z"),
"grade" : "B",
"score" : 14
}
],
"name" : "Morris Park Bake Shop",
"restaurant_id" : "30075445"
}

您可以继续使用示例数据集来熟悉 MongoDB,或者使用 db.restaurants.drop() 方法删除它。

  1. db.restaurants.drop()

最后,使用 exit 命令退出命令行界面。

  1. exit
输出
Bye

结论

在本教程中,您向 yum 添加了一个第三方仓库,安装了 MongoDB 数据库服务器,导入了一个示例数据集,并执行了一个简单的查询。还有很多其他您可以使用 MongoDB 做的事情,比如创建带有集合的数据库、填充数据库的众多文档以及构建强大的应用程序。要了解有关 MongoDB 的更多信息,请查看我们的系列教程《如何使用 MongoDB 管理数据库》或我们的其他关于 MongoDB 的教程。

bannerAds