Skip to content

MongoDB的安装、配置、卸载

MongoDB的版本偶数版本为稳定版,基数版本为开发板,所以下载时要注意下载偶数版的,比如:4.2位稳定版 4.1为开发版 MongDB对32位操纵系统支持不佳。所以3.2版本后没有再对32位系统的支持

一、windows10安装MongoDB

一般windows上面的mongoDB都是用于开发阶段,不会做过多的配置,包括密码等,且windows上面的安置就是下一步下一步的操作,很简单,所以不过多纠结,可以参照下面文章, 本文主要讲解centos上面的安装

windows安装参考文章:https://blog.csdn.net/baidu_39298625/article/details/98592631 MongoDB官网:https://www.mongodb.com/

下载地址:https://www.mongodb.org/dl/win32

二、Centos安装MongoDB与卸载

我当前的 centos版本为 centos8.0.1

(一)、查看是否有MongoDB源

CentOS8的源位置在/etc/yum.repos.d/

cd /etc/yum.repos.d/
ll

检查是否有这样的文件,名字可能不完全一样,但是至少会包含mongodb字样

image.png

若没有这文件,则手动建一个

vim /etc/yum.repos.d/mongodb.repo

文件内容如下:

[mongodb-org]
name=MongoDB Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mongodb/yum/el$releasever/
gpgcheck=0
enabled=1

(二)、安装

1、执行命令

sudo yum makecache

image.png

2、执行命令

sudo yum install mongodb-org

image.pngimage.png

安装成功

3、启动mongodb 并设置开机启动

依次执行以下命令

systemctl status mongod
systemctl start mongod
systemctl enable mongod

image.png

4、检查MongoDB的服务状态和端口监听信息

依次执行以下命令

systemctl status mongod.service
netstat -anplt| grep mongod
ss -anplt | grep mongod

image.png

可以看到端口是21017

5、配置MongoDB可让外网访问

默认情况下,MongoDB服务在本地主机接口上运行。因此,要使其能够从网络访问,我们需要在所有接口上运行MongoDB服务

必须先停止服务再修改,否则修改完后重启会报错!!!!

先停止mongodb服务

sudo service mongod stop

修改bindIp 为 0.0.0.0

vim /etc/mongod.conf

image.png

重新启动MongoDB服务以应用更改

sudo service mongod start

注意:

  • 配置完后重启时候可能会报错,就像

image.png

这应该是属于Linux系统的权限问题。 解决方案: 我们进入到/tmp目录并找到mongodb-27017.sock文件

cd /tmp
ll *.sock

image.png

接着,修改文件权限:

chown mongod:mongod mongodb-27017.sock

最后重新启动

systemctl restart mongod.service

启动成功,可以在浏览器输入数据库所在的公网Ip:27017,例如:121.4.81.217:27017 image.png 至此,可以外网访问了

本地也可以访问了

(三)、卸载mongodb

1、卸载MongoDB

sudo yum erase $(rpm -qa | grep mongodb-org)

image.pngimage.png

2、删除日志文件

sudo rm -r /var/log/mongodb

image.png

3、删除数据文件

sudo rm -r /var/lib/mongo

image.png

三、安装连接工具,用连接工具连接,操纵mongodb

图形化工具的好处有:

  • 1、图形化操作,对数据库和集合和字段一目了然
  • 2、图形化工具也提供命令操纵控制台,最关键的一点是输入命令有提示

这里安装的连接工具是MongoDB Compass

1、下载 MongoDB Compass

下载地址:MongoDB Compass

2、解压安装MongoDB Compass

将下载的安装包解压后,点击 MongoDBCompass.exe可执行文件即可 image.png

3、Compass连接mongoDB

首次打开连接工具,若是连接的是本地mongodb,则什么也不用动,直接点击Connect按钮即可(默认无账号密码,端口27017) 若是连接远程数据库,则需要输入mongoDB所在主机的IP,端口,用户名密码(若有的话就输入,没有则忽略)

mongodb://<用户名:密码@>IP地址:端口/<数据库名称>  # <>里面的内容表示可选
例如:
   有密码: mongodb://root:123456@121.4.81.217:27017/study
   无密码:mongodb://121.4.81.217:27.17/study

image.png

4、MongoDB Compass使用说明

image.png

image.png

四、MongoDB设置用账户密码访问

在上一步中,我们安装好MongoDB后,可以直接通过MongoDB Compass连接到数据库,不需要输入账户密码,这使得任何人都可以访问我们的数据库,这仅在开发阶段可以这样,若是要部署到正式环境,这非常危险,无疑是将我们的数据暴露给任何人。 mongodb密码和传统数据如mysql等有些区别: mongodb的用户名和密码是基于特定数据库的,而不是基于整个系统的。所有所有数据库db都需要设置密码。

先用xshell登录服务器,进入到 mongo

mongo

1、查看所有数据库

在mongodb新版本里并没有admin数据库,但是并不妨碍第2步操作。

show dbs

image.png

2、进入admin数据库

use admin

image.png

3、创建管理员账户

mongodb中的用户是基于身份role的,该管理员账户的 role是 userAdminAnyDatabase。admin用户用于管理账号,不能进行关闭数据库等操作。

db.createUser({ user: "admin", pwd: "admin", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })

image.png

说明

  • 1、user: "admin", pwd: "admin" 分别为用户名密码
  • 2、role: "userAdminAnyDatabase"是固定写法,这是一个账号管理员的角色
    • role 用来设置用户的权限,比如读,读写 等等
  • 3、db:"admin"是指的为admin设置超级管理员账户

扩展-----mongoDB权限说明

参考:https://www.cnblogs.com/pl-boke/p/10063351.html

Built-In Roles(内置角色):
1. 数据库用户角色:read、readWrite; 
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager; 
4. 备份恢复角色:backup、restore; 
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase 
6. 超级用户角色:root 
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)

Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限

4、创建root

创建完admin管理员,创建一个超级管理员root。角色:root。root角色用于关闭数据库 db.shutdownServer() 关闭当前数据库运行实例或安全停止有关操作进程

db.createUser({user: "root",pwd: "root", roles: [ { role: "root", db: "admin" } ]})

image.png

5、创建用户自己的数据库的管理角色

!!!!注意:一定要切换到所在数据库上去创建用户,不然创建的用户还是属于admin

use <n你的数据库名称>   # 例如:use study

db.createUser({user: "user",pwd: "123456",roles: [ { role: "dbOwner", db: "yourdatabase" } ]})

image.png

说明

  • role: "dbOwner"代表数据库所有者角色,拥有最高该数据库最高权限。比如新建索引等。充当账号管理员和超级管理员,可以为自己的数据库创建用户了
  • 如果是读写角色的话,权限设置为role: "readWrite"

6、查看当前数据库用户

use <数据库名称>
show users

image.png

7、删除用户

删除用户必须由账号管理员来删,所以,切换到admin角色

use admin

db.auth("admin","password") # 登录上去

7.1、删除单个用户

db.system.users.remove({user:"XXXXXX"})

7.2、删除所有用户

db.system.users.remove({})

五、开启访问控制

1、为mongod.service编辑systemd单元文件。

要为MongoDB服务器启用访问控制,我们需要为mongod.service编辑systemd单元文件。

vim /usr/lib/systemd/system/mongod.service

2、修改文件内 Environment 值

在此文件中找到以下行

Environment="OPTIONS=-f /etc/mongod.conf"

并将其替换为

Environment="OPTIONS=--auth -f /etc/mongod.conf"

fce0bb9dca738de82a05f2a1abc9c631.png

3、我们已经使用文本编辑器显式地编辑了systemd单位文件。因此,我们需要执行以下命令来通知systemd有关此更改。

systemctl daemon-reload

4、重新启动MongoDB服务以应用更改

systemctl restart mongod.service

5、要检查访问控制,请连接MongoDB shell并执行一些管理命令。

b0378be31ae3d0117e67e10fff95e7bf.png

mongo
use admin;
show users;

这次show user命令引发身份验证错误,说明我们的访问控制已经启用。 现在,以管理员用户身份连接。

db.auth("ljh",passwordPrompt())
或者
db.auth("该数据库用户名","该数据库密码")  # 例如:db.auth("admin","admin")

2c6e90b54d39cf12e4f62104e69da63e.png

已成功使用特权用户执行命令“显示用户”。 MongoDB数据库的访问控制已启用。 登录数据库需要用 mongodb://username:password@121.4.81.217:27017/study

六、一些常用设置

(一)、防火墙设置

如果我们启动了防火墙策略,还需要允许Linux防火墙中的MongoDB服务传入流量,否则外网也无法访问到mongoDB

[root@VM-0-2-centos ~]# firewall-cmd --permanent --add-service=mongodb
success
[root@VM-0-2-centos ~]# firewall-cmd --reload  #重新加载防火墙
success

(二)、开放端口

MongoDB默认端口号为27017

firewall-cmd --zone=public --add-port=27017/tcp   #mongodb默认端口号

(三)、查看mongodb的网络状态

netstat -nltp|grep mongo

image.png

(四)、关闭selinux

selinux是

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#需要重启服务器生效
setenforce 0   #临时生效,重启服务器无效

七、参考文章

https://www.cnblogs.com/fb010001/p/14949548.htmlhttps://blog.csdn.net/live4046/article/details/108826809