MongoDB 安装

简介

mongodb 官网:https://www.mongodb.com/try/download/bi-connector

官网提供四种类型的安装包

  • Atlas: MongoDB 集群
  • On-premises: MongoDB 本地安装包
  • Tools: MongoDB tools。详细介绍 https://docs.mongodb.com/tools/
  • Mobile & Edge: 移动和边缘部署

mongodb安装

mongodb安装和配置(源码)

1、下载mongodb包(其它版本请自行下载)

1
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.2.4.tgz

2、解压和复制mongodb至目录 /usr/local/mongodb

1
2
tar -zxvf mongodb-linux-x86_64-rhel70-3.2.4.tgz  
cp -r mongodb-linux-x86_64-rhel70-3.2.4 /usr/local/mongodb

3、系统profile配置

1
2
3
4
vi /etc/profile  

export MONGODB_HOME=/usr/local/mongodb
export PATH=$PATH:$MONGODB_HOME/bin

保存后,重启系统配置

1
source /etc/profile

4、mongodb启动配置

创建文件夹

1
2
3
4
cd /usr/local/mongodb/bin  

mkdir -p data/db
mkdir logs

MongoDB 配置

1
2
3
4
5
6
7
vi mongodb.conf  

dbpath = /usr/local/mongodb/data/db #数据文件存放目录
logpath = /usr/local/mongodb/logs/mongodb.log #日志文件存放目录
port = 27017 #端口
fork = true #以守护程序的方式启用,即在后台运行
nohttpinterface = true

5、启动mongod数据库服务

1
./mongod -f mongodb.conf

6、进入mongodb数据库

1
./mongo

7、设置mongodb.service启动服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cd /lib/systemd/system  
vi mongodb.service

[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/bin/mongodb.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

8、设置mongodb.service权限

1
chmod 754 mongodb.service

9、系统mongodb.service操作命令

1
2
3
4
5
6
#启动服务  
systemctl start mongodb.service
#关闭服务
systemctl stop mongodb.service
#开机启动
systemctl enable mongodb.service

安装 mongodb (yum 安装)

Packages 包说明

MongoDB 官方源中包含以下几个依赖包:

mongodb-org: MongoDB 元数据包,安装时自动安装下面四个组件包:

  1. mongodb-org-server: 包含 MongoDB 守护进程和相关的配置和初始化脚本。
  2. mongodb-org-mongos: 包含 mongos 的守护进程。
  3. mongodb-org-shell: 包含 mongo shell。
  4. mongodb-org-tools: 包含 MongoDB 的工具: mongoimport, bsondump, mongodump, mongoexport, mongofiles, mongooplog, mongoperf, mongorestore, mongostat, and mongotop。

1.配置 MongoDB 的 yum 源

1
2
3
4
5
6
7
vim /etc/yum.repos.d/mongodb-org-3.4.repo

#添加以下内容:
[mongodb-org-3.4]
name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc #这里可以修改 gpgcheck=0, 省去 gpg 验证

[root@localhost ~]# yum makecache

2.安装 MongoDB

1
2
3
4
5
6
7
8
9
10
yum -y install mongodb-org

# 安装完成后显示

已安装:
mongodb-org.x86_64 0:3.4.14-1.el7

作为依赖被安装:
mongodb-org-mongos.x86_64 0:3.4.14-1.el7 mongodb-org-server.x86_64 0:3.4.14-1.el7
mongodb-org-shell.x86_64 0:3.4.14-1.el7 mongodb-org-tools.x86_64 0:3.4.14-1.el7

查看 mongo 安装位置 :

1
whereis mongod

查看修改配置文件 :

1
vim /etc/mongod.conf

3.启动 MongoDB

启动 mongodb :

1
systemctl start mongod.service

停止 mongodb :

1
systemctl stop mongod.service

查到 mongodb 的状态:

1
systemctl status mongod.service

外网访问需要关闭防火墙:

1
2
systemctl stop firewalld.service #停止 firewall
systemctl disable firewalld.service #禁止 firewall 开机启动

启动 Mongo shell

1
mongo

查看数据库:

1
show dbs

设置 mongodb 远程访问:

编辑 mongod.conf 注释bindIp,并重启 mongodb.(这句配置代表只能本机使用,所以需注释)

1
vim /etc/mongod.conf

重启 mongodb 使修改生效:

1
systemctl restart mongod.service

到这里就可以正常使用 mongodb 了

MongoDB 认证

MongoDB采用基于角色的访问控制(RBAC)来确定用户的访问。 授予用户一个或多个角色,确定用户对MongoDB资源的访问权限和用户可以执行哪些操作。 用户应该只有最小权限集才能确保最小权限的系统。
MongoDB系统的每个应用程序和用户都应该映射到不同的用户。 这种访问隔离便于访问撤销和持续的用户维护。

1.开启认证

MongoDB 默认安装完成以后,只允许本地连接,同时不需要使用任何账号密码就可以直接连接 MongoDB,这样就容易被黑,让支付一些比特币,所以为了避免这些不必要的麻烦,所以我们需要给 Mongo 设置一个账号密码;

1
[root@iZ2ze2pbbffhmn53ao4tuaZ bin]# ./mongod --auth  # 启用认证

2.创建管理员用户

要在MongoDB部署中创建用户,请连接到部署,然后使用db.createUser()方法或createUser命令添加用户

1
2
3
4
> use admin
switched to db admin
> db.createUser({user:"admin",pwd:"password",roles:["root"]})
Successfully added user: { "user" : "admin", "roles" : [ "root" ] }

3.认证登录,返回结果为1,表示认证成功。

1
> db.auth("admin", "password")

4.MongoDB role 类型

  • 数据库用户角色(Database User Roles)

    read:授予 User 只读数据的权限
    readWrite:授予 User 读写数据的权限

  • 数据库管理角色(Database Administration Roles):

    dbAdmin:在当前 dB 中执行管理操作
    dbOwner:在当前 DB 中执行任意操作
    userAdmin:在当前 DB 中管理 User

  • 备份和还原角色(Backup and Restoration Roles):

    backup
    restore

  • 跨库角色(All-Database Roles):

    readAnyDatabase:授予在所有数据库上读取数据的权限
    readWriteAnyDatabase:授予在所有数据库上读写数据的权限
    userAdminAnyDatabase:授予在所有数据库上管理 User 的权限
    dbAdminAnyDatabase:授予管理所有数据库的权限

  • 集群管理角色(Cluster Administration Roles):

    clusterAdmin:授予管理集群的最高权限
    clusterManager:授予管理和监控集群的权限,A user with this role can access the config and local databases, which are used in sharding and replication, respectively.
    clusterMonitor:授予监控集群的权限,对监控工具具有 readonly 的权限
    hostManager:管理 Server

5.添加数据库用户

创建指定数据库的用户,该用户只能访问该数据库。也可以为此数据库上的用户指定访问级别。

1
2
3
> use flowpp
switched to db flowpp
> db.createUser({user: "flowpp", pwd: "flopww", roles: [{ role: "dbOwner", db: "flowpp" }]}) # 创建用户 flowpp,设置密码 flopww,设置角色 dbOwner

use flowpp 表示用户在 flowpp 库中创建,就一定要 flowpp 库验证身份,即用户的信息跟随随数据库。比如上述 flowpp 即使有 bar 库的读取权限,但是一定要先在 flowpp 库进行身份验证,直接访问会提示验证失败

6.查看系统用户

1
2
3
4
5
> use admin
switched to db admin
> db.system.users.find() # 显示当前系统用户
{ "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "9jXmylyRAK22TZmzv1Thig==", "storedKey" : "z76cVrBjX/CTFmn5RujtU+dz7Nw=", "serverKey" : "JQGonM84iDMI1nIXW7FdyOE55ig=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
{ "_id" : "flowpp.flowpp", "user" : "flowpp", "db" : "flowpp", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "KvocqWZA9E2tXBHpKpdAeQ==", "storedKey" : "50Kxc3LEgCSVN1z16S8g4A6jVp8=", "serverKey" : "0RSnsxd/7Yzmqro/YOHf/kfbHCk=" } }, "roles" : [ { "role" : "dbOwner", "db" : "flowpp" } ] }

7.删除用户

1
2
3
4
5
6
7
8
9
10
1.切换 admin ,删除用户 flowpp ,删除失败
> use admin
switched to db admin
> db.dropUser("flowpp")
false
2.切换 flowpp ,删除用户 flowpp,删除成功
> use flowpp
switched to db flowpp
> db.dropUser("flowpp")
true

说明:

删除用户的时候需要切换到用户管理的数据库才可以删除;

在云服务器中安装 MongoDB 后(默认端口 27017),发现本地 telnet 该端口连接失败,无法连接远程的 MongoDB,解决方法如下。

1、查看原先的 mongodb 配置文件:

dbpath=C:tableSpace_MongoDBdata
logpath=C:tableSpace_MongoDBlogmongodb.log
发现没有指定 bind_ip,会导致 mongodb 默认绑定为 127.0.0.1,导致外部无法访问。

2.修改 mongodb 配置文件如下:

bind_ip=0.0.0.0
port=27017
dbpath=C:tableSpace_MongoDBdata
logpath=C:tableSpace_MongoDBlogmongodb.log
3.重启 mongodb 服务。

mongoexport 命令安装

1、下载mongodb-tools包(其它版本请自行下载)

1
wget https://fastdl.mongodb.org/tools/db/mongodb-database-tools-rhel70-x86_64-100.5.0.tgz

2、解压和复制mongodb至目录 /usr/local/mongodb

1
2
tar -zxvf mongodb-database-tools-rhel70-x86_64-100.5.0.tgz
cp -r mongodb-database-tools-rhel70-x86_64-100.5.0 /usr/local/mongodb_tools

3、系统profile配置

1
2
3
4
5
vi /etc/profile  

export MONGODB_HOME=/usr/local/mongodb
export MONGODB_HOME_TOOLS=/usr/local/mongodb_tools
export PATH=$PATH:$MONGODB_HOME/bin:$MONGODB_HOME_TOOLS/bin

然后就可以使用 mongoexport和mongoimport 了

可视化工具

安装报错

network error while attemptin to run command whatsmyuri on host xxx

报错详情

1
2
3
4
5
6
7
8
9
$ mongo <IP_ADDRESS>:27017/youtube_advertising -u user -p password

MongoDB shell version: 3.2.0
connecting to: <IP_ADDRESS>:27017/youtube_advertising
2016-02-19T17:10:02.923+0100 E QUERY [thread1] Error: network error while attempting to run command 'whatsmyuri' on host '<IP_ADDRESS>:27017' :
connect@src/mongo/shell/mongo.js:226:14
@(connect):1:6

exception: connect failed

解决方案

  • 更换和 mongodb server 版本一样的 client 端

MongoDB 安装
https://flepeng.github.io/041-MongoDB-MongoDB-安装/
作者
Lepeng
发布于
2021年6月6日
许可协议