前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在CentOS 7上安装MongoDB

在CentOS 7上安装MongoDB

作者头像
ZRoger
发布2018-09-05 15:00:26
14.5K0
发布2018-09-05 15:00:26
举报
文章被收录于专栏:波涛汹涌

在这个MongoDB教程中,我们将解释如何在CentOS 7上安装数据库,然后提供一些基本特性和功能的简短指南。

MongoDB是一个非关系型数据库引擎,面向文档的数据库的访问。它是不断增长的NoSQL运动的一部分,其中还有Redis和Cassandra等非关系型数据库(尽管许多非关系型数据库之间存在巨大差异)。

MongoDB旨在提供传统关系数据库管理系统(RDBMS)的替代方案。除了灵活数据模型设计和可扩展架构外,MongoDB还提供JSON输出和专用的,特定于语言的绑定,使其特别适用于自定义应用程序开发和快速原型设计。MongoDB已经在许多大规模生产部署中使用,并且目前是所有系统中最流行的数据库引擎之一。

由于MongoDB运行可能需要大量内存空间,因此我们建议在本指南中使用拥有高内存的Linode

在你开始之前

  • 熟悉我们的入门指南并完成设置Linode主机名和时区的步骤。
  • 完成“ 保护您的服务器 ”这个部分来创建标准用户帐户,同时加强SSH访问并删除不必要的网络服务。
  • 更新你的系统:
代码语言:txt
复制
sudo yum update

注意 本指南是为非root用户编写的。需要提升权限的命令带有前缀sudo。如果你不熟悉该sudo命令,可以查看我们的“ 用户和组”指南。

添加MongoDB源

MongoDB的最新稳定版本是3.2,在撰写本文时,在CentOS 7源中默认不包含MongoDB的数据源。所以,我们需要自己添加MongoDB源。

创建一个新文件,/etc/yum.repos.d/mongodb-org-3.2.repo以便你可以使用安装最新版本yum。将以下内容添加到文件中:

文件位置:/etc/yum.repos.d/mongodb-org-3.2.repo

代码语言:txt
复制
[mongodb-org-3.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc

安装MongoDB

现在已经添加了MongoDB数据源,我们已准备好安装最新的稳定版MongoDB:

代码语言:txt
复制
sudo yum install mongodb-org

此命令将安装mongodb-org,包含以下内容:

  • mongodb-org-server - 标准的MongoDB服务端程序(既守护程序),以及相应的init脚本和配置
  • mongodb-org-mongos - MongoDB Shard集群服务端程序(守护进程)
  • mongodb-org-shell - MongoDB shell,用于通过命令行与MongoDB交互
  • mongodb-org-tools - 包含一些用于恢复,导入和导出数据的基本工具,以及其他各种功能。

这些软件包提供了一个很好的基础,可以满足大多数用例,我们建议将它们全部安装。但是,如果你只需要安装部分服务,可以从上面的列表中选择性地安装软件包,而不是使用mongodb-org安装所有服务。

有关安装过程和选项的更多信息,请参阅MongoDB官方安装教程

配置MongoDB

MongoDB的配置文件位于/etc/mongod.conf,并以YAML格式编写。大多数设置在文件中都有非常好(便于理解)的注释。我们概述了以下默认选项:

  • systemLog 指定各种日志记录选项,解释如下:
    • destination 告诉MongoDB是将日志输出存储为文件或者是系统日志
    • logAppend 指定守护程序重新启动时是否将新日志记录附加到现有日志的末尾(而不是创建备份并在重新启动时启动新日志)
    • path告诉服务端程序(守护进程)发送日志信息到某个位置(/var/log/mongodb/mongod.log默认情况下)
  • storage 设置MongoDB如何存储数据,设置如下:
    • dbPath指示数据库文件的存储位置(默认:/var/lib/mongo
    • journal.enabled 启用或禁用日志,以确保数据文件可以恢复
  • net 指定各种网络选项,具体如下:
    • port 是MongoDB服务端(守护)程序监听的端口
    • bindIP 指定MongoDB绑定的IP地址,因此它可以监听来自其他应用程序的连接

这些只是默认设置的几个基本配置选项。

我们强烈建议取消注释该security部分并添加以下内容:

文件位置:/etc/mongod.conf

代码语言:txt
复制
security:
  authorization: enabled

authorization选项为你的数据库启用基于角色的访问控制。如果未指定任何值,则任何用户都可以修改任何数据库。我们将在本指南的后面解释如何创建数据库用户并设置其权限。

有关如何在配置文件中自定义这些值和其他值的更多信息,请参阅MongoDB官方配置教程

更改MongoDB配置文件后,重新启动该服务,如以下部分所示。

增加用户限制

发出以下命令以增加MongoDB的打开文件和进程限制:

代码语言:txt
复制
echo "mongod     soft    nofiles   64000" >> /etc/security/limits.conf
echo "mongod     soft    nproc     64000" >> /etc/security/limits.conf

这些是推荐的设置,但你可能需要根据个人用途进行调整。有关更多信息,请参阅MongoDB文档

启动和停止MongoDB

要启动,重新启动或停止MongoDB服务,请从以下命令发出相应的命令:

代码语言:txt
复制
sudo systemctl start mongod
sudo systemctl restart mongod
sudo systemctl stop mongod

你还可以设置开机时候MongoDB自动启动:

代码语言:txt
复制
sudo systemctl enable mongod

创建数据库用户

如果在“ 配置MongoDB”部分中启用了基于角色的访问控制,请创建一个用户管理员,其中包含用于数据库的凭据:

1.打开mongoshell:

代码语言:txt
复制
mongo

2.默认情况下,MongoDB连接到一个名为test的数据库。在添加任何用户之前,创建一个数据库来存储用户数据以进行身份验

代码语言:txt
复制
use admin

3.使用以下命令创建管理用户,该用户可以在任何数据库上创建其他用户。为了更好的安全性,请更改值mongo-adminpassword

代码语言:txt
复制
db.createUser({user: "mongo-admin", pwd: "password", roles:[{role: "userAdminAnyDatabase", db: "admin"}]})

将这些凭证保存在安全的地方,以备将来参考。输出将显示写入数据库的所有信息,但密码除外:

代码语言:txt
复制
Successfully added user: {
    "user" : "mongo-admin",
    "roles" : [
            {
                "role" : "userAdminAnyDatabase",
                "db" : "admin"
            }
    ]
}

4.退出mongo shell:

代码语言:txt
复制
quit()

5.使用在步骤3中创建的凭据测试与MongoDB的连接,使用admin数据库进行身份验证:

代码语言:txt
复制
mongo -u mongo-admin -p --authenticationDatabase admin

这里的-u-p--authenticationDatabase在上面的命令中是必需的,以便验证与shell的连接。如果没有身份验证,可以访问MongoDB shell,但不允许连接到数据库。

这里的mongo-admin在步骤3中创建的用户只是基于指定的角色进行管理。它被定义为所有数据库的用户管理员,但本身没有任何数据库权限。你可以使用它来创建其他用户并定义他们的角色。如果你使用MongoDB在多个应用程序中,请为其相应的数据库设置具有自定义权限的不同用户。

6.作为mongo-admin用户,创建一个新数据库来存储常规用户数据以进行身份验证。以下示例调用此数据库user-data

代码语言:txt
复制
use user-data

7.不同数据库的权限在单独的roles对象中处理。此示例example-user使用user-data数据库的只读权限创建用户,并具有exampleDB我们将在下面的“ 管理数据和集合”部分中创建的数据库的读写权限。

创建一个新的非管理用户以输入测试数据。改变两者example-user以及password相关和安全的事物:

代码语言:txt
复制
db.createUser({user: "example-user", pwd: "password", roles:[{role: "read", db: "user-data"}, {role:"readWrite", db: "exampleDB"}]})

要创建其他用户,请重复步骤6和7作为管理用户,通过替换适当的值来创建新的用户名,密码和角色。

8.退出mongo shell:

代码语言:txt
复制
quit()

有关访问控制和用户管理的更多信息,以及有关保护数据库的其他技巧,请参阅MongoDB安全文档

管理数据和集合

MongoDB的大部分受欢迎的原因来自其易于集成。与数据库的交互是通过JavaScript方法完成的,但是可以使用其他语言的驱动程序。本节将演示一些基本功能,但我们建议你根据具体用例进行进一步的研究。

1.打开MongoDB shell,然后使用我们之前创建的example-user:

代码语言:txt
复制
mongo -u example-user -p --authenticationDatabase user-data

2.创建一个新数据库。这个例子叫它exampleDB

代码语言:txt
复制
use exampleDB

确保此数据库名称与用户具有读写权限的数据库名称相对应(我们在上一节的步骤7中添加了这些权限)。

要显示当前使用的数据库名称,请运行该db命令。

3.创建一个名为的新集合exampleCollection

代码语言:txt
复制
db.createCollection("exampleCollection", {capped: false})

如果你不熟悉MongoDB术语,则可以将集合视为与关系型数据库中的表类似。有关创建新集合的更多信息,请参阅db.createCollection()方法上的MongoDB文档。

注意 集合名称不应包含某些标点符号,如连字符-。当然,也可能不会引发异常,除非你尝试使用或修改集合。有关更多信息,请参阅MongoDB的命名限制

4.创建一些简单的数据实体插进测试数据库中。MongoDB接受输入以JSON对象的形式作为文档,如下所示。在ab变量用于简化输入; 对象也可以通过函数直接插入。

代码语言:txt
复制
var a = { name : "John Doe",  attributes: { age : 30, address : "123 Main St", phone : 8675309 }}
var b = { name : "Jane Doe",  attributes: { age : 29, address : "321 Main Rd", favorites : { food : "Spaghetti", animal : "Dog" } }}

请注意,插入到集合中的文档不需要具有相同的数据结构(schema),这是使用NoSQL数据库的众多好处之一。

5.使用insert方法将数据插入到exampleCollection中:

代码语言:txt
复制
db.exampleCollection.insert(a) 
db.exampleCollection.insert(b)

每个操作的输出将显示成功写入当前使用的数据库的对象数:

代码语言:txt
复制
WriteResult({ "nInserted" : 1 })

6.确认exampleCollection已正确创建集合:

代码语言:txt
复制
show collections

输出将列出包含当前工作数据库中数据的所有集合:

代码语言:txt
复制
exampleCollection

7.使用find方法进行条件查询,查看集合exampleCollection中特定的数据。如果没有任何参数,则返回当前集合的前20个文档:

代码语言:txt
复制
db.exampleCollection.find()

输出的结果类似下面这样:

代码语言:txt
复制
{ "_id" : ObjectId("571a3e7507d0fcd78baef08f"), "name" : "John Doe" } { "_id" : ObjectId("571a3e8707d0fcd78baef090"), "age" : 30 }

你可能会注意到我们输入的对象前面有_id键和ObjectId值。这些是MongoDB在_id未明确定义值时生成的唯一索引。ObjectId输入查询时,可以将值用作主键,但为了便于使用,你可能希望像创建任何其他数据库系统一样创建自己的索引。

find方法还可以用于通过输入搜索项参数(以对象的形式)而不是将其留空来搜索特定文档或字段。例如:

代码语言:txt
复制
db.exampleCollection.find({"name" : "John Doe"})

运行上面的命令将返回包含该{"name" : "John Doe"}对象的文档列表。

额外的MongoDB功能

如上所述,MongoDB有一组可用的特定于语言的驱动程序,可用于在非JavaScript应用程序中与你的数据库进行交互。这些驱动程序提供的一个优点是能够允许使用不同语言编写的应用程序使用相同的数据库,而不需要对象数据映射器(ODM)。但是,如果你确实想使用对象数据映射器,则可以使用许多支持良好的ODM。

mongodb-org-tools中,我们还安装了许多其他工具,如mongodumpmongorestore用于创建和恢复备份和快照,以及mongoimportmongoexport从扩展JSON或CSV支持或TSV文件导入和导出内容。

要查看可用选项或如何使用特定方法,请附加.help()到命令的末尾。例如,要查看“管理数据和集合”这部分里中步骤6的find方法的选项列表:

代码语言:txt
复制
db.exampleCollection.find().help()

更多信息

有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在你开始之前
  • 添加MongoDB源
  • 安装MongoDB
  • 配置MongoDB
    • 增加用户限制
    • 启动和停止MongoDB
    • 创建数据库用户
    • 管理数据和集合
    • 额外的MongoDB功能
    • 更多信息
    相关产品与服务
    云数据库 MongoDB
    腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档