Linux上安装Mongodb
个人博客使用了Mongodb,记录安装步骤以及如何配置
前言
因为自己在博客中用到了Mongodb数据库,这也是第一次接触到手动安装配置Mongodb,因此记录一下。 操作系统:Centos8
下载安装Mongodb
可以在Mongodb官网上选择相应系统的Mongdb安装包。复制下载连接,然后进入到Linux操作系统。我的mongodb安装在/usr/local/src目录下,因此,cd到该目录,下载mongodb的安装包。
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可以查看当前目录下的所有文件夹和文件);
其中,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命令:
vim + 文件名# 编辑该文件,或者使用vi + 文件名- 按 i 或者 a 键 进行编辑模式
- 编辑完成后,按 Esc 键,退出编辑,
- 输入
: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面板进行数据库操作了。
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的用户名和密码
首先将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
- 查找mongdb的端口号,我使用的
top命令
-
找到mongodb的PID,使用
kill -9 PID号干掉进程。(此处需要root权限) -
然后再次启动mongodb。
./mongod -f /home/admin/database/conf/mongodb.conf
关于npm命令找不到的问题
在启动mongodb后,再去启动node.js后端的时候,遇到了如下一个问题;
显示npm命令没有找到,在网上找了半天,终于找到了答案,是因为root用户无法运行npm命令,解决办法就是退出root用户,使用admin用户运行。输入exit退回admin权限。
如果某个端口被占用
在启动node项目的时候,经常提示3000端口已被占用;
- 使用
lsof -i:3000查看占用的进程
-
kill -9 3617杀掉该进程 -
重新启动。
windows 版本的mongodb如何添加用户验证
- 通过服务找到mongodb的配置文件路径。
修改该配置文件后重启服务。
security:
authorization: enabled