如何在 Linux 上从源代码安装 MongoDB

举报
Tiamo_T 发表于 2022/07/15 19:31:18 2022/07/15
【摘要】 MongoDB 这个名字来源于 Hu mongo us DB。

MongoDB 这个名字来源于 Hu mongo us DB。

它是一个开源 NoSQL 数据库。MongoDB 由 10gen 公司开发和商业支持。

MongoDB 的重点是可扩展性和性能。MongoDB 是一个无模式的面向文档的数据库。这会将数据存储为 JSON 对象。与传统的 SQL 数据库不同,您不需要定义模式。架构嵌入在数据文档本身中,使您可以随时轻松更改架构,而无需担心更改任何先前加载的文档。高性能和可扩展性是可能的,因为没有连接,也没有在 MongoDB 上执行多文档事务。这还提供了跨服务器的复制,并具有自动故障转移的能力。您还可以跨服务器扩展以实现高可用性。

使用 YUM 安装 MongoDB

使用 yum 安装 MongoDB 相当简单。

设置 10gen Yum 存储库

首先,将 10gen Repository 添加到您的 yum 中,如下所示。

# vi /etc/yum.repos.d/10gen.repo
[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
enabled=1

注意:以上是针对 64 位系统的。如果您使用的是 32 位系统,请将上述文件中的 baseurl 指向 http://downloads-distro.mongodb.org/repo/redhat/os/i686

现在,执行“yum info”查看 mongo-10gen 和 mongo-10gen-server 包。


# yum info mongo-10gen
Name        : mongo-10gen
Arch        : x86_64
Version     : 2.2.2
Release     : mongodb_1
Size        : 43 M
Repo        : 10gen
Summary     : mongo client shell and tools
URL         : http://www.mongodb.org
License     : AGPL 3.0

# yum info mongo-10gen-server
Name        : mongo-10gen-server
Arch        : x86_64
Version     : 2.2.2
Release     : mongodb_1
Size        : 6.7 M
Repo        : 10gen
Summary     : mongo server, sharding server, and support scripts
URL         : http://www.mongodb.org
License     : AGPL 3.0

安装 Mongo 客户端和服务器包

安装这两个 mongo-* 包,如下所示。

# yum install mongo-10gen mongo-10gen-server
  Installing : mongo-10gen-2.2.2-mongodb_1.x86_64
  Installing : mongo-10gen-server-2.2.2-mongodb_1.x86_64

验证 mongod.conf 文件

这也会安装默认的 /etc/mongod.conf 文件和启动脚本 /etc/rc.d/init.d/mongod

/etc/mongod.conf 文件包含以下默认值。正如您在此处看到的,mongo 数据库文件将在 /var/lib/mongo 目录下创建。如果要在不同目录下创建 DB 文件,请更改 mongod.conf 文件中的 dbpath 目录。

# cat /etc/mongod.conf
logpath=/var/log/mongo/mongod.log
logappend=true
fork = true
dbpath=/var/lib/mongo
pidfilepath = /var/run/mongodb/mongod.pid

启动 MongoDB 服务器

如下图所示启动mongod服务。

# service mongod start
Starting mongod: forked process: 15968
all output going to: /var/log/mongo/mongod.log
child process started successfully, parent exiting

查看日志文件以确保 MongoDB 成功启动。默认情况下,MongoDB 服务器在端口 27017 上运行。

# cat /var/log/mongo/mongod.log
Sat Jan 19 10:57:03 [initandlisten] MongoDB starting : pid=15968 port=27017 dbpath=/var/lib/mongo 64-bit host=centos
Sat Jan 19 10:57:03 [initandlisten] db version v2.2.2, pdfile version 4.5
Sat Jan 19 10:57:03 [initandlisten] git version: d1b43b61a5308c4ad0679d34b262c5af9d664267
Sat Jan 19 10:57:03 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49
Sat Jan 19 10:57:03 [initandlisten] options: { config: "/etc/mongod.conf", dbpath: "/var/lib/mongo", fork: "true", logappend: "true", logpath: "/var/log/mongo/mongod.log", pidfilepath: "/var/run/mongodb/mongod.pid" }
Sat Jan 19 10:57:03 [initandlisten] journal dir=/var/lib/mongo/journal
Sat Jan 19 10:57:03 [initandlisten] recover : no journal files present, no recovery needed
Sat Jan 19 10:57:03 [websvr] admin web console waiting for connections on port 28017
Sat Jan 19 10:57:03 [initandlisten] waiting for connections on port 27017

使用 Mongo Shell 连接 MongoDB

键入“mongo”以启动 mongo shell 并连接到 MongoDB 以执行一些数据库操作。这将显示“>”提示,您可以在其中键入 mongo 客户端命令。

# mongo
MongoDB shell version: 2.2.2
connecting to: test
Welcome to the MongoDB shell.
>

以下命令会将示例文档插入到名为“sites”的 MongoDB 集合中。这类似于“INSERT into”SQL 命令。

> doc1 = { name : "ramesh" };
> db.sites.insert( doc1 );

下面将显示 MongoDB“站点”集合中的所有文档。这类似于“SELECT * from”SQL 命令。

> db.sites.find()
{ "_id" : ObjectId("50f72809a8e3c7a3aba2bf15"), "name" : "ramesh" }

从源安装 MongoDB

如果您想从源代码安装 MongoDB,请按照以下步骤操作。

安装先决条件

确保 gcc-c++ 和 glibc-devel 包已经安装。MongoDB 使用 scons 来构建源代码。因此,请确保已安装 scons 包。

# rpm -qa | egrep 'gcc-c++|glibc-devel|scons'
gcc-c++-4.4.6-4.el6.x86_64
glibc-devel-2.12-1.80.el6_3.6.x86_64
scons-2.0.1-1.el6.noarch

如果您没有这些先决条件,请安装它。

# yum install gcc-c++ glibc-devel scons

下载 MongoDB

前往MongoDB 下载页面,下载源代码。目前 MongoDB 的稳定版本是 2.2.2。

获得下载链接后,您还可以使用 wget 直接下载源代码。

cd /usr/src
wget http://downloads.mongodb.org/src/mongodb-src-r2.2.2.tar.gz
tar xvfz mongodb-src-r2.2.2.tar.gz
cd mongodb-src-r2.2.2

使用 Scons 构建 MongoDB

Scons 与 make 类似。键入“scons all”以从源代码构建 MongoDB。

请注意,当您执行“scons all”时,它只使用一个 CPU 并且一次只运行一个作业来构建源代码。所以,它会很慢。如果您希望 scons 在构建时使用所有 CPU 并运行多个作业,您应该指定它应该执行的作业数。

在我的系统上,我有 8 个内核。所以,我执行如下所示的“scons -j 8 all”来构建。

# scons -j 8 all
scons: Reading SConscript files ...
scons version: 2.0.1
python version: 2 6 6 'final' 0
Checking whether the C++ compiler works(cached) yes
Checking for C header file unistd.h... (cached) yes
Checking whether clock_gettime is declared... (cached) yes
Checking for C library rt... (cached) yes
Checking for C++ header file execinfo.h... (cached) yes
Checking whether backtrace is declared... (cached) yes
Checking whether backtrace_symbols is declared... (cached) yes
Checking for C library pcap... (cached) no
Checking for C library wpcap... (cached) no
Checking if __malloc_hook is declared volatile... (cached) no
scons: done reading SConscript files.
..
Install file: "build/linux2/normal/mongo/test" as "test"
scons: done building targets.

构建源代码后,我们应该安装它。使用“scons install”安装 MongoDB。默认情况下,它将安装在 /usr/local/bin 下。如果您想将 MongoDB 安装在不同的目录下,请使用“–prefix”选项。

要在 /opt/mongo 目录下安装 MongoDB,请执行以下 scons 命令。

# scons --prefix=/opt/mongo install

如下所示,它已将 MongoDB 安装在 /opt/mongo 目录下。

# ls -l /opt/mongo/
total 12
drwxr-xr-x. 2 root root 4096 Jan 19 13:33 bin
drwxr-xr-x. 3 root root 4096 Jan 19 13:33 include
drwxr-xr-x. 2 root root 4096 Jan 19 13:33 lib

创建 /etc/mongod.conf 文件

创建以下配置文件,MongoDB 服务器将在启动期间使用该配置文件。

# cat /etc/mongod.conf
logpath=/var/log/mongo/mongod.log
logappend=true
fork = true
dbpath=/var/lib/mongo
pidfilepath = /var/run/mongodb/mongod.pid

在上述文件中,dbpath 参数表示当我们启动 MongoDB 数据库时,它将在 /var/lib/mongo 目录下创建任何需要的数据库。您可以相应地更改此路径。

创建 dbpath 引用的目录。

# mkdir -p /var/lib/mongo

启动 MongoDB 守护进程

将 /opt/mongo/bin/ 添加到 PATH 变量中。

# export $PATH=$PATH:/opt/mongo/bin/

通过使用 -f 选项传递配置文件位置来启动 mongodb,如下所示。

# mongod -f /etc/mongod.conf
forked process: 20127
all output going to: /var/log/mongo/mongod.log
child process started successfully, parent exiting

如果您只使用“mongod”而没有任何参数,它将在前台启动进程。当您关闭终端时,您的 MongoDB 服务器也将停止。因此,请确保使用 -f 选项执行 mongod,如上所示。

验证日志文件以确保它正确启动。默认情况下,MongoDB 服务器在端口 27017 上运行。

# cat /var/log/mongo/mongod.log
Sat Jan 19 13:48:44 [initandlisten] MongoDB starting : pid=20127 port=27017 dbpath=/var/lib/mongo 64-bit host=centos
Sat Jan 19 13:48:44 [initandlisten] db version v2.2.2, pdfile version 4.5
Sat Jan 19 13:48:44 [initandlisten] git version: nogitversion
Sat Jan 19 13:48:44 [initandlisten] build info: Linux centos 2.6.32-279.19.1.el6.x86_64 #1 SMP Wed Dec 19 07:05:20 UTC 2012 x86_64 BOOST_LIB_VERSION=1_49
Sat Jan 19 13:48:44 [initandlisten] options: { config: "/etc/mongod.conf", dbpath: "/var/lib/mongo", fork: "true", logappend: "true", logpath: "/var/log/mongo/mongod.log", pidfilepath: "/var/run/mongodb/mongod.pid" }
Sat Jan 19 13:48:44 [initandlisten] journal dir=/var/lib/mongo/journal
Sat Jan 19 13:48:44 [initandlisten] recover : no journal files present, no recovery needed
Sat Jan 19 13:48:44 [websvr] admin web console waiting for connections on port 28017
Sat Jan 19 13:48:44 [initandlisten] waiting for connections on port 27017

使用 Mongo Shell 连接 MongoDB

键入“mongo”以启动 mongo shell 并连接到 MongoDB 以执行一些数据库操作。这将显示“>”提示,您可以在其中键入 mongo 客户端命令。

# mongo
MongoDB shell version: 2.2.2
connecting to: test
Welcome to the MongoDB shell.
>

以下命令会将示例文档插入到名为“sites”的 MongoDB 集合中。这类似于“INSERT into”SQL 命令。

> doc1 = { name : "ramesh" };
> db.sites.insert( doc1 );

下面将显示 MongoDB“站点”集合中的所有文档。这类似于“SELECT * from”SQL 命令。

> db.sites.find()
{ "_id" : ObjectId("50f72809a8e3c7a3aba2bf15"), "name" : "ramesh" }
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。