centos7 安装MongoDB 5.0.6

MongoDB简介:

        MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。

        MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

        MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

 

        MongoDB 是基于文档的 NoSql 存储引擎。MongoDB 的数据库管理由数据库、Collection(集合,类似 MySql 的表)、Document(文档,类似 MySQL 的行)组成,每个 Document 都是一个类 JSON 结构 BSON 结构数据(是类 json 的二进制存储格式,数据组织和访问方式完全和 JSON 一样

        MongoDB 的核心特性是:No Schema、高可用、分布式(可平行扩展),另外 MongoDB 自带数据压缩功能,使得同样的数据存储所需的资源更少。


一、mongoDB是什么? 

        MongoDB是一个NoSQL的非关系型数据库 ,支持海量数据存储,高性能的读写。

        1. mongo的体系结构

        冷暖自知一抹茶ck

                1)、mongo中的集合相当于mysql中的概念; 

                2)、mongo中的文档相当于mysql中的概念; 

                3)、mongo中的相当于mysql中字段/列的概念;


        2. mongoDB的特点(或使用场景)

                1)、支持存储海量数据;(例如:直播中的打赏数据); 

                2)、支持频繁的数据读写;(例如:游戏道具); 

                3)、数据安全性不高,存在数据误差(丢失数据); 

                4)、mongoDB不支持多表操作,不支持事务; 

                5)、mongoDB使用Bson存储格式,支持动态字段管理;


        3. mongoDB与mysql、redis对比 

        与redis对比 

                1. redis纯内存数据库,内存不足时触发淘汰策略,mongoDB使用内存加磁盘的存储策略具有高扩展性; 

                2. mongoDB使用Bson存储格式,支持动态字段管理方便扩展; 

        与mysql对比 

                1. mongoDB不支持多表操作,不支持事务; 

                2. mongoDB使用Bson存储格式,支持动态字段管理; 

        查询效率对比 

                Redis > MongoDB > MySQL


        4. mongoDB存储原理

        冷暖自知一抹茶ck

        1、mongoDb采用内存加磁盘的方式存储数据; 

        2mongoDb支持数据分片,当单一的服务器中磁盘不够用的时候,还可以串联其他服务器; 

        3客户端的请求到达内存时,先在日志中记录下操作记录,然后再去操作内存; 

        4内存中的日志每10ms向磁盘中的日志进行同步一次,数据则每分钟同步一次; 

        5客户端先去内存中查询数据,内存中没有再去查询磁盘; 

        6当客户端写入的时候,会先写入到内存中,内存中写入后请求直接返回,内存中的数据会根据同步策略同步到磁盘; 

        7如果机器宕机,在重启服务的时候会解析磁盘中的日志和磁盘中的数据进行对比,将未入到磁盘中的数据写入磁盘,但可能会丢失10ms的数据;



MongoDB 各平台下载地址:https://www.mongodb.com/try/download/community

文档:https://www.mongodb.com/docs/manual/tutorial/getting-started/

MongoDB中文社区: https://mongoing.com/

windows mongodb扩展:https://pecl.php.net/package/mongodb


主要特点:

  • MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。

  • 可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8.Gandhi Road")来实现更快的排序。

  • 可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。

  • 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络 中的其他节点上这就是所谓的分片。

  • Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。

  • MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。

  • Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。

  • Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。

  • GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。

  • MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。

  • MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。

  • MongoDB安装简单。



Linux  MongoDB-5.0.6 下载安装:

        https://www.mongodb.com/ ,  选择 Products-->Community Server:

        点击Community Server,进入如下页面,在Available Downloads窗口(右下红框)选择:

        Version: 5.0.6(current) --> Platform: RedHat/CentOS 8.0 --> Package: server和shell(rpm)

          https://www.mongodb.com/download-center/community/releases


1、点击Download 按钮分别下载以下两个文件:

        服务器包:mongodb-org-server-5.0.6-1.el7.x86_64.rpm 

        Mongo Shell 包:mongodb-org-shell-5.0.6-1.el7.x86_64.rpm

[root@kafka1 ~]# wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/5.0/x86_64/RPMS/mongodb-org-server-5.0.6-1.el7.x86_64.rpm
[root@kafka1 ~]# wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/5.0/x86_64/RPMS/mongodb-org-shell-5.0.6-1.el7.x86_64.rpm
[root@kafka1 ~]# mkdir /usr/local/mongodb5.0.6
[root@kafka1 ~]# mv mongodb-org-server-5.0.6-1.el7.x86_64.rpm /usr/local/mongodb5.0.6/
[root@kafka1 ~]# mv mongodb-org-shell-5.0.6-1.el7.x86_64.rpm /usr/local/mongodb5.0.6/

2、安装

[root@kafka1 ~]# cd /usr/local/mongodb5.0.6/
[root@kafka1 mongodb5.0.6]# rpm -ivh mongodb-org-server-5.0.6-1.el7.x86_64.rpm
警告:mongodb-org-server-5.0.6-1.el7.x86_64.rpm: 头V3 RSA/SHA1 Signature, 密钥 ID e2c63c11: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:mongodb-org-server-5.0.6-1.el7   ################################# [100%]
Created symlink from /etc/systemd/system/multi-user.target.wants/mongod.service to /usr/lib/systemd/system/mongod.service.
[root@kafka1 mongodb5.0.6]# rpm -ivh mongodb-org-shell-5.0.6-1.el7.x86_64.rpm
警告:mongodb-org-shell-5.0.6-1.el7.x86_64.rpm: 头V3 RSA/SHA1 Signature, 密钥 ID e2c63c11: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:mongodb-org-shell-5.0.6-1.el7    ################################# [100%]

        查看当前安装的相关包rpm -qa | grep -i mongodb

        查看当前安装的相关目录find / -name mongodb

[root@kafka1 mongodb5.0.6]# find / -name mongodb
/run/mongodb
/etc/selinux/targeted/active/modules/100/mongodb
/var/log/mongodb
[root@kafka1 mongodb5.0.6]# find / -name mongod
/usr/bin/mongod
[root@kafka1 mongodb5.0.6]# find / -name mongo
/var/lib/mongo
/usr/bin/mongo

3、MongoDB-5.0.6 启动

[root@kafka1 mongodb5.0.6]# systemctl start mongod
[root@kafka1 mongodb5.0.6]# systemctl status mongod
● mongod.service - MongoDB Database Server
   Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2022-04-03 20:27:26 PDT; 4s ago
     Docs: https://docs.mongodb.org/manual
  Process: 5582 ExecStart=/usr/bin/mongod $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 5579 ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb (code=exited, status=0/SUCCESS)
  Process: 5576 ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb (code=exited, status=0/SUCCESS)
  Process: 5574 ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb (code=exited, status=0/SUCCESS)
Main PID: 5600 (mongod)
    Tasks: 34
   CGroup: /system.slice/mongod.service
           └─5600 /usr/bin/mongod -f /etc/mongod.conf


4月 03 20:27:11 kafka1 systemd[1]: Starting MongoDB Database Server...
4月 03 20:27:19 kafka1 mongod[5582]: about to fork child process, waiting until server is ready for connections.
4月 03 20:27:19 kafka1 mongod[5582]: forked process: 5600
4月 03 20:27:26 kafka1 systemd[1]: Started MongoDB Database Server.

        常用命令:

                systemctl start mongod        启动服务

                systemctl status mongod       查看服务状态 

                systemctl stop mongod         停止服务   

                systemctl restart mongod      重启服务

                systemctl disable mongod      禁止开启启动

                systemctl enable mongod       加入开启启动

        查看版本:mongo --version


4、客户端访问:

4.1、默认本机连接:

[root@kafka1 mongodb5.0.6]# systemctl start mongod        //启动
[root@kafka1 mongodb5.0.6]# mongo
MongoDB shell version v5.0.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
...

        默认的是本地地址:127.0.0.1:27017 (27017是默认的端口号)。


        查看数据库、查看表

查看数据库:show databases 或show dbs
> show databases
admin   0.000GB
config  0.000GB
local   0.000GB
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

使用admin数据库、查看表
> use admin
switched to db admin
> show tables
system.version
使用admin数据库、查看表
> use config
switched to db config
> show tables
system.sessions
使用admin数据库、查看表
> use local
switched to db local
> show tables
startup_log
>

        4.2设置远程访问:

        查找mongodb配置文件所在的目录:

[root@kafka1 mongodb5.0.6]# find / -name mongod.conf
/etc/mongod.conf

[root@kafka1 mongodb5.0.6]# vim /etc/mongod.conf     //编辑 mongod.conf 配置文件
编辑内容:
net:
  port: 27017
  bindIp: 192.168.142.131

##绑定远程 mongodb 服务器地址:192.168.19.128(本人的服务器地址)。

重启服务
[root@kafka1 mongodb5.0.6]# systemctl stop mongod
[root@kafka1 mongodb5.0.6]# systemctl start mongod

用 mongo 命令链接:
[root@kafka1 mongodb5.0.6]# mongo --host 192.168.142.131:27017
MongoDB shell version v5.0.6
connecting to: mongodb://192.168.142.131:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("c772f256-3aea-4a34-a36d-9aec980d5481") }
MongoDB server version: 5.0.6
================
Warning: the "mongo" shell has been superseded by "mongosh",
which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in
an upcoming release.
For installation instructions, see
https://docs.mongodb.com/mongodb-shell/install/
================
---
The server generated these startup warnings when booting:
        2022-04-03T20:46:04.675-07:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
        2022-04-03T20:46:04.675-07:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
        2022-04-03T20:46:04.675-07:00: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never'
---
---
        Enable MongoDB's free cloud-based monitoring service, which will then receive and display
        metrics about your deployment (disk utilization, CPU, operation statistics, etc).


        The monitoring data will be available on a MongoDB website with a unique URL accessible to you
        and anyone you share the URL with. MongoDB may use this information to make product
        improvements and to suggest MongoDB products and deployment options to you.


        To enable free monitoring, run the following command: db.enableFreeMonitoring()
        To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
>


查看端口映射检查是否启动成功:
[root@kafka1 ~]# netstat -nltp|grep mongod
tcp        0      0 192.168.142.131:27017   0.0.0.0:*               LISTEN      3795/mongod   
或
[root@kafka1 ~]# netstat -nltp|grep 27017
tcp        0      0 192.168.142.131:27017   0.0.0.0:*               LISTEN      3795/mongod
或
[root@kafka1 ~]# ps -ef | grep mongo
mongod     3795      1  0 02:30 ?        00:00:06 /usr/bin/mongod -f /etc/mongod.conf
root       4364   2133  0 02:39 pts/0    00:00:00 mongo --host 192.168.142.131:27017
root       4506   2756  0 02:41 pts/1    00:00:00 grep --color=auto mongo
或
[root@kafka1 ~]# top  
top - 02:43:28 up 40 min,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 198 total,   1 running, 197 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   995692 total,    74224 free,   614796 used,   306672 buff/cache
KiB Swap:  2097148 total,  2084084 free,    13064 used.   217412 avail Mem

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND   
643 root      20   0  295568   2352   1244 S   0.3  0.2   0:04.08 vmtoolsd  
3795 mongod   20   0 1604572  68580   8500 S   0.3  6.9   0:07.15 mongod

        4.3关闭MongoDB。

第一、运行中关闭
    如果我们在操作命令行中执行的话,直接可以用命令行关闭
    退出mongo命令行工具:ctrl + c
    
第二、使用数据库命令关闭   
> use admin;
switched to db admin
> db.shutdownServer();
Wed Nov 14 06:07:33 DBClientCursor::init call() failed
Wed Nov 14 06:07:33 query failed : admin.$cmd { shutdown: 1.0 } to: 127.0.0.1:27017
server should be down...
Wed Nov 14 06:07:33 trying reconnect to 127.0.0.1:27017
Wed Nov 14 06:07:33 reconnect 127.0.0.1:27017 failed couldnt connect to server 127.0.0.1:27017

第三、mongod命令关闭:
mongod 命令的 shutdown 选项能干净的关闭 MongoDB 服务,会释放内存中MongoDB占用的内存,个人推荐。
[root@kafka1 ~]# mongod --shutdown --dbpath --logpath /var/log/mongodb/mongod.log

第四、pkill mongod 。


5.用户验证和权限管理    https://www.cnblogs.com/realcp1018/p/11064093.html

1)、mongodb 分布式数据库,用户验证(本文称为client auth)和集群成员间的验证(本文称为internal auth) internal auth 使用keyfiles kms之类的验证

2)、用户是和库绑定的,或者说用户验证的粒度是库级别,而不是整个实例级别

3)、不同的库下面可以有相同的用户名

4)、一般创建一个root账户,再创建一些普通用户做日常操作

5)、一般来说应用使用的用户只需要readWrite角色即可

 

    5.1设置账号密码

> use admin
switched to db admin
> db.createUser({ user: 'root', pwd: 'root',roles: [ { role: "dbOwner", db: "test" }] })    //创建管理员用户,设置用户名密码
Successfully added user: {
    "user" : "root",
    "roles" : [
        {
            "role" : "dbOwner",
            "db" : "test"
        }
    ]
}
> db.auth("root","root")                                                                    //认证  返回1代表成功
1

        修改mongodb的配置文件/etc/mongod.conf,开启权限认证

检索security关键字,添加以下配置

#security:
security:
 authorization: "enabled"    

这里注意配置文件格式为yml书写格式规范,authorization为security的子节点,要换行缩进,authorization的值前面要有个空格。就是死冒号之后有个空格。

        配置修改完成之后,需要重启mongodb数据库服务。重启后,再连接就需要账号密码授权了。

[root@kafka1 ~]# systemctl restart  mongod


现在有两种方式进行用户身份的验证
第一种 (类似 MySql) 客户端连接时,指定用户名,密码,db名称
[root@kafka1 ~]# mongo --host 192.168.142.131 --port 27017  -u 'ck' -p '123456'  --authenticationDatabase 'cuikai'

第二种 客户端连接后,再进行验证
[root@kafka1 ~]# mongo --host 192.168.142.131 --port 27017
> use cuikai
switched to db cuikai
> db.auth("ck","123456")
1                                        // 输出 1 表示验证成功
> show collections
firstCollection
> db.firstCollection.find({name:"yzh"})
{ "_id" : ObjectId("624ac9115f1382ed452a93df"), "name" : "yzh", "age" : "25" }

    

    5.2 mongodb的角色种类:

        Read:允许用户读取指定数据库

        readWrite:允许用户读写指定数据库

        dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

        userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

        clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

        readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

        readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

        userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

        dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

        root:只在admin数据库中可用。超级账号,超级权限


        mongodb给用户授权有两种方式

1.在添加用户的时候授权

use order;
db.createUser(
   {
     user: "devweb-test3",
     pwd: "mmt-devweb",
     roles: [ { role: "dbAdmin", db: "order" },{ role: "readWrite", db: "order" }   ]
   }
);

2.创建用户后给用户添加权限

use order;
db.grantRolesToUser( "devweb-test3" , [ { role: "dbOwner", db: "order" } ])

        如何修改密码

db.changeUserPassword('root','rootNew');

        删除用户

use order;
db.dropUser('devweb-test3');

        回收用户权限

use order;
db.revokeRolesFromUser( "devweb-test3" , [ { role: "readWrite", db: "order" } ])


        

        服务启动失败:Job for mongod.service failed because the control process exited with error code. See "systemctl status mongod.service" and "journalctl -xe" for details.

1.查看配置 错误日志信息
[root@kafka1 lib]# vim /etc/mongod.conf
[root@kafka1 tmp]# tail -f  /var/log/mongodb/mongod.log
........
{"t":{"$date":"2022-04-04T02:29:29.500-07:00"},"s":"I",  "c":"CONTROL",  "id":21951,   "ctx":"initandlisten","msg":"Options set by command line","attr":{"options":{"config":"/etc/mongod.conf","net":{"bindIp":"192.168.142.131","port":27017},"processManagement":{"fork":true,"pidFilePath":"/var/run/mongodb/mongod.pid","timeZoneInfo":"/usr/share/zoneinfo"},"storage":{"dbPath":"/var/lib/mongo","journal":{"enabled":true}},"systemLog":{"destination":"file","logAppend":true,"path":"/var/log/mongodb/mongod.log"}}}}
{"t":{"$date":"2022-04-04T02:29:29.501-07:00"},"s":"E",  "c":"NETWORK",  "id":23024,   "ctx":"initandlisten","msg":"Failed to unlink socket file","attr":{"path":"/tmp/mongodb-27017.sock","error":"Operation not permitted"}}
{"t":{"$date":"2022-04-04T02:29:29.501-07:00"},"s":"F",  "c":"-",        "id":23091,   "ctx":"initandlisten","msg":"Fatal assertion","attr":{"msgid":40486,"file":"src/mongo/transport/transport_layer_asio.cpp","line":989}}
{"t":{"$date":"2022-04-04T02:29:29.501-07:00"},"s":"F",  "c":"-",        "id":23092,   "ctx":"initandlisten","msg":"\n\n***aborting after fassert() failure\n\n"}
^C

2.删除该文件,重启服务
[root@kafka1 bin]# cd /tmp/
[root@kafka1 tmp]# ls
mongodb-27017.sock
[root@kafka1 tmp]# rm -rf mongodb-27017.sock

         


参考:https://www.cnblogs.com/YOUCAN/archive/2013/01/27/2879121.html


冷暖自知一抹茶ck
请先登录后发表评论
  • 最新评论
  • 总共0条评论