Linux上安装Mongodb

404 阅读6分钟

Linux上安装Mongodb

个人博客使用了Mongodb,记录安装步骤以及如何配置

前言

因为自己在博客中用到了Mongodb数据库,这也是第一次接触到手动安装配置Mongodb,因此记录一下。 操作系统:Centos8

下载安装Mongodb

可以在Mongodb官网上选择相应系统的Mongdb安装包。复制下载连接,然后进入到Linux操作系统。我的mongodb安装在/usr/local/src目录下,因此,cd到该目录,下载mongodb的安装包。

image.png

wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-rhel80-5.0.2.tgz

下载完成后,解压该安装包。

tar zxvf mongodb-linux-x86_64-rhel80-5.0.2.tgz

将解压后的文件夹名称变为mongodb5.0.2,当然这一步也不是必须的,如果不怕每次输入路径麻烦的话可以不更改。

mv mongodb-linux-x86_64-rhel80-5.0.2 mongodb5.0.2

解压完成后,会在mongodb5.0.2有以下目录文件 (使用dir可以查看当前目录下的所有文件夹和文件);

mongodb5.0.2的目录

其中,bin目录中的文件是要执行的程序。

配置mongodb的启动文件

接下来需要新建数据库的储存目录以及配置文件,我的数据库建在/home/admin/database目录下,cd 到该目录下,database是我新建的目录,在该目录下新建三个文件夹mkdir db log conf,其中db用来存放数据文件,log用来存放日志文件,log文件夹中新建一个名为log的文件注意是文件,不是文件夹conf用来存放配置文件,里面新建一个名为mongodb.conf的文件。编辑mongodb.conf文件(linux命令:vim mongodb.conf)。

dbpath = /home/admin/database/db # 数据库文件目录
logpath = /home/admin/database/log/log # 日志存放目录
port = 27017 #端口
fork = true # 守护进程
# auth = true # 开启身份验证
# bind_ip = 0.0.0.0 # 允许远程访问,如果为127.0.0.1则只能本地访问,后续可以打开该配置,通过compass访问数据库,但要注意配置权限

保存并退出,刚开始可以不开启身份验证。

在保存的时候可能会保存失败,有可能是因为没有root权限,我使用的阿里云服务器,输入 sudo su root 直接获取root权限,也可以使用 su 命令,然后输入密码获取root权限,之后再进行保存。后续所有的操作可能都会涉及到需要root权限。

文件保存编辑Linux命令:

  1. vim + 文件名 # 编辑该文件,或者使用 vi + 文件名
  2. 按 i 或者 a 键 进行编辑模式
  3. 编辑完成后,按 Esc 键,退出编辑,
  4. 输入 :wq 保存并退出, :q 直接退出,不保存

以上所有的准备工作都已经完成,接下来就可以启动mongodb了。

启动Mongodb

进入到刚才解压好的文件夹内,cd /usr/local/src/mongodb5.0.2/bin,执行命令

./mongod -f /home/admin/database/conf/mongodb.conf

mongodb 就可以启动起来了。

数据库操作

同样在/usr/local/src/mongodb5.0.2/bin目录下,执行./mongo就可以打开shell面板进行数据库操作了。

shell面板

show dbs # 查看数据库目录

use dbname # 进入到名叫dbname的数据库

show collections # 查看当前数据库的集合目录

mongodb默认会有admin,local,conf数据库。

权限配置

在不开启用户验证的前提下,进入到shell操作界面,首先需要配置一个牛逼plus的权限。一定要进入到admin的数据库中,然后再配置权限。

# 进入admin数据库
use admin 

# 创建一个用户,该用户拥有最高权限
db.createUser({
    user: "用户名"pwd: "用户密码",
    roles: ["root"]
})

切记一定要记住用户名和密码,要不然就和我一样,前脚刚设置完,后脚就忘了自己设置的密码是什么,如果真忘了用户名和密码,可以看文章后面的解决办法。

创建完成后,Ctrl + C退出shell面板,然后修改mongodb的配置文件,打开auth=true,重启mongodb。根据之前的操作进入到shell操作面板。

use admin # 进入admin 数据库

db.auth("用户名","密码") # 用户验证,输入刚配置好的用户名和密码,成功会返回1

# 获取到了最高权限,然后给博客用的数据库建立一个可读写的用户以供使用

# 首先要进入到博客的数据库中

use blog

# 创建用户
db.createUser({
    user: "用户名",
    pwd: "密码",
    roles: [{
        role: "readWrite",
        db: "blog"
    }]
)

一定要进入到要创建用户的数据库中,否则无法创建该用户。

role字段对应的可选值有:

角色权限描述
read数据库用户角色,只读数据权限
readWrite数据库用户角色,读写数据权限
dbAdmin数据库管理角色,在当前db中执行管理操作的权限
dbOwner数据库管理角色,在当前db中执行任意操作
userADmin数据库管理角色,在当前db中管理user的权限
readAnyDatabase所有数据库上都有读取数据的权限
readWriteAnyDatabase所有数据库上都有读写数据的权限
userAdminAnyDatabase所有数据库上都有管理user的权限
dbAdminAnyDatabase管理所有数据库的权限
clusterAdmin管理机器的最高权限
clusterManager管理和监控集群的权限
clusterMonitor监控集群的权限
hostManager管理Server
root超级用户

至此,创建用户就成功了,我们可以使用配置的用户名和密码连接数据库取得相应的权限。

连接数据库

node.js 中连接

因为我使用的node.js作为后端,驱动选择的mongoose。连接代码如下:

const mongoose = require('mongoose')

mongoose.connect("mongodb://用户名:密码@localhost:27017/blog", function (err) {
  if (err) {
    console.log("数据库连接失败")
    return
  }
  console.log("数据库连接成功")
})

module.exports = mongoose;

mongodb compass 可视化工具连接

mongodb compass 可视化工具连接

问题解决

忘记了mongodb的用户名和密码

首先将mongodb的配置文件mongodb.conf文件中的auth=true注释掉,重新启动mongodb,

# 进入到admin数据库中
use admin

# 1. 如果知道用户名
# 删除该用户
db.dropUser("用户名")

# 2. 如果不知道用户名
# 可以先查询一下用户表,然后确认删除哪个用户
show collections # 查看admin中的集合,里面有一个system.users集合

# 查找该表所有的数据
db.system.users.find()

# 根据查到的数组中的 user 确定要删除哪个用户
db.dropUser("用户名")

查询用户表

根据user删除对应的用户

重启mongodb

  1. 查找mongdb的端口号,我使用的top命令

top

  1. 找到mongodb的PID,使用kill -9 PID号干掉进程。(此处需要root权限)

  2. 然后再次启动mongodb。 ./mongod -f /home/admin/database/conf/mongodb.conf

关于npm命令找不到的问题

在启动mongodb后,再去启动node.js后端的时候,遇到了如下一个问题;

bash: npm: command not found

显示npm命令没有找到,在网上找了半天,终于找到了答案,是因为root用户无法运行npm命令,解决办法就是退出root用户,使用admin用户运行。输入exit退回admin权限。

如果某个端口被占用

在启动node项目的时候,经常提示3000端口已被占用;

3000端口被占用

  1. 使用lsof -i:3000查看占用的进程

image.png

  1. kill -9 3617 杀掉该进程

  2. 重新启动。

windows 版本的mongodb如何添加用户验证

  1. 通过服务找到mongodb的配置文件路径。

image.png

修改该配置文件后重启服务。

security:
  authorization: enabled