Linux环境下Mongodb部署

文章目录

一、系统环境

  • CentOS Stream 9 64bit

二、MongoDb安装

添加MongoDB官方库

  1. 执行以下命令
bash 复制代码
sudo vim /etc/yum.repos.d/mongodb-org-4.4.repo
  1. 在文件中添加以下内容
nginx 复制代码
[mongodb-org-4.4]

name=MongoDB Repository

baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/

gpgcheck=1

enabled=1

gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
  1. 如不熟悉vim编辑器操作,可手动在/etc/yum.repos.d/目录下创建mongodb-org-4.4.repo文件,打开文件后,在文件内添加以上文件内容,保存

安装MongoDB

  • 执行以下命令
bash 复制代码
sudo yum install mongodb-org -y

配置MongoDB

  1. 打开配置文件
bash 复制代码
sudo vim /etc/mongod.conf
  1. 以下为mongodb常见配置及说明
nginx 复制代码
# mongod.conf

# 所有配置项文档:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# 配置与日志相关信息
# 是否追加方式写入日志,默认True
# 日志文件的路径
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# 配置与存储相关信息
# 数据库文件位置
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true
#  engine:
#  wiredTiger:

# 配置与网络相关信息
# 默认127.0.0.1 只能通过本地连接
# 0.0.0.0 任意地址远程连接
net:
  port: 27017
  bindIp: 0.0.0.0

# 配置流程管理相关信息
# 是否以守护进程方式运行,默认false
processManagement:
  fork: true
  timeZoneInfo: /usr/share/zoneinfo

# 启用安全控制
# security:
#   authorization: enabled
  1. 按需修改配置后,保存关闭

三、MongoDB常见操作

  1. 启动MongoDB
bash 复制代码
sudo systemctl start mongod
  1. 关闭MongoDB
bash 复制代码
sudo systemctl stop mongod
  1. 重启MongoDB
bash 复制代码
sudo systemctl restart mongod
  1. 查看当前MongoDB状态
bash 复制代码
sudo systemctl status mongod
  1. 将MongoDB设置为系统服务
bash 复制代码
sudo systemctl enable mongod
  1. 登录MongoDB
bash 复制代码
mongo

四、MongoDB用户管理

创建用户

  1. 切换到admin数据库:use admin
  2. 创建管理员admin
javascript 复制代码
db.createUser({ user: "admin", pwd: "123456", roles: [
  { role: "readWriteAnyDatabase", db: "admin" },
  { role: "userAdminAnyDatabase", db: "admin" },
  { role: "dbAdminAnyDatabase", db: "admin" }
]});
复制代码
- 参数释义:
    * roles:数组形式,配置具体权限
        + `role: "readWriteAnyDatabase"`表示有读写任意数据库的权限
        + `db: "admin"`,表示:当前权限只对`admin`数据库生效
- `admin`数据库,是 MongoDB 的管理级的特殊数据库,是有特殊意义的。
- 所以`readWriteAnyDatabase`这个权限虽然设置给了`admin`数据库,但实际上,`admin`数据库里还拥有`readWriteAnyDatabase`这个权限的`admin`用户,所以,该用户对任意数据库都具有读写的功能,不只局限在`admin`数据库。
- **注意**:只有`admin`数据库,才有`readWriteAnyDatabase`权限,如果是自己创建的数据库,无法为用户设置`readWriteAnyDatabase`权限,会报错该数据库没有这个权限的用户。
  1. 创建超级管理员root
javascript 复制代码
db.createUser({ user: "root", pwd: "123456", roles: [
  { role: "root", db: "admin" }
]});
复制代码
- `root`权限也只能放在`admin`数据库内才能生效
- `root`是最高权限,可以做任何事情
  1. 创建普通用户zhangsan
javascript 复制代码
db.createUser({ user: "zhangsan", pwd: "123456", roles: [
  { role: "readWrite", db: "school" },
  { role: "userAdmin", db: "school" },
  { role: "readWrite", db: "myBlog" },
  { role: "userAdmin", db: "myBlog" }
]});
  1. MongoDB常用权限
  • read:允许读取指定数据库中数据的权限。
  • readWrite:允许读、写指定数据库中数据的权限。
  • dbAdmin:允许对指定数据库中执行管理函数的权限,如索引创建、删除,查看统计或访问 system.profile。
  • userAdmin:允许对指定数据库执行用户管理的权限,比如创建、删除和修改用户。
  • dbOwner:允许对指定数据库执行任何管理操作。该角色结合了readWrite 、 dbAdmin和userAdmin角色授予的权限。
  • <font style="color:#E4495B;">readAnyDatabase</font>:只对admin数据库可用,授予用户对所有数据库的read权限。
  • <font style="color:#E4495B;">readWriteAnyDatabase</font>:只对admin数据库可用,授予用户对所有数据库的readWrite权限。
  • <font style="color:#E4495B;">userAdminAnyDatabase</font>:只对admin数据库可用,授予用户对所有数据库的userAdmin权限。
  • <font style="color:#E4495B;">dbAdminAnyDatabase</font>:只对admin数据库可用,授予用户对所有数据库的dbAdmin权限。
  • <font style="color:#AD1A2B;">root</font>:只对admin数据库可用。超级账号,超级权限。

修改密码

  • db.updateUser("用户名", {pwd: "新密码"})

删除用户

  • db.dropUser("用户名")

五、启用安全控制

  1. 修改mongodb.conf配置文件:
    • 一般默认在/etc目录
nginx 复制代码
# 启用安全控制
security:
  authorization: enabled
  1. 重启 MongoDB 服务:sudo systemctl restart mongod
  2. 重新进入MongoDB sheel:mongo
  3. 选择要验证的数据库:use admin
    • 保存了需要验证的用户信息的数据库
  4. 验证用户信息:db.auth("用户名", "密码")
    • 返回值为1,表示验证通过。验证失败有error提示

六、备份与还原

1. 备份

  • 语法:mongodump --host 服务器地址 --port 端口 --db 要备份的数据库名 --out 备份文件存储目录
bash 复制代码
mongodump --host localhost --port 27017 --db my_DB_name --out C:\Users\Administrator\Desktop\mydb.dump

2. 恢复

  • 语法:mongorestore --host localhost:27017 -u用户名 -p密码 --authenticationDatabase=验证数据库 备份文件目录 --drop
bash 复制代码
mongorestore --host localhost:27017 -uroot -p123456 --authenticationDatabase=admin C:\Users\Administrator\Desktop\mydb.dump --drop
  • mongorestore参数详解:

    • -h--host=<hostname>:连接地址
    • --port=<port>:端口号
      • 也可以:--host hostname:port
    • -u--username=<username>:用户名
    • -p--password=<password>:密码
    • --authenticationDatabase=<db-name>:验证数据库名
    • --authenticationMechanism=<mechanism>:验证机制
    • -d--db=<db-name>:指定恢复的数据库,如果不指定-d,会从备份目录中获取数据库名
    • -c--collection<collection-name>:指定恢复的集合,如果不指定-c,会从备份目录中获取集合名
    • --drop:导入集合前先删掉集合,不会删除不会备份中的集合
    • --gzip:从压缩文件中进行恢复

七、外部工具连接MongoDB

  1. 可视化管理工具(此处以Navicat示例):
  1. NodeJs(以mongoose驱动为例):
json 复制代码
{
  "name": "mongodb_test",
  "version": "0.0.0",
  ...
  "dependencies": {
    ...
    "mongoose": "^8.4.0",
    ...
  }
  ...
}
javascript 复制代码
const mongoose = require('mongoose');
 
// 替换以下信息为你的数据库信息
const host = '数据库地址';
const database = 'dbName';	// 要连接的数据库
const port = 27017;

const username = '用户名';
const password = '密码';
const authSource = 'admin'; // 通常使用 'admin' 数据库作为身份验证来源
 
// 构建连接字符串,包含认证信息
const authMechanism = 'DEFAULT'; // 或者使用 'SCRAM-SHA-1', 'SCRAM-SHA-256', 'MONGODB-X509', 等

const connectionString = `mongodb://${username}:${password}@${host}:${port}/${database}?authSource=${authSource}&authMechanism=${authMechanism}`;
 
// 使用构建的连接字符串连接数据库
mongoose.connect(connectionString)
.then(() => console.log('数据库连接成功'))
.catch(err => console.error('数据库连接失败', err));

module.exports = mongoose;
相关推荐
大叔是90后大叔22 分钟前
linux安装node版本管理工具(nvm和fnm)
linux·服务器
四岁爱上了她23 分钟前
CentOS更换yum源
linux·运维·centos
再学一丢丢37 分钟前
LVS+Keepalived+dns高可用项目架构
运维·服务器
艾伦_耶格宇1 小时前
Linux实验 -6 Linux网卡配置
linux
web守墓人1 小时前
【gpt生成-总览】怎样才算开发了一门编程语言,需要通过什么测试
运维·服务器·gpt
Yawesh_best1 小时前
Immich图库本地部署与远程管理:打造你的专属照片云服务
运维
vx_33076231721 小时前
vos3000外呼系统怎么给普通用户开通播放下载录音权限?
运维·服务器·人工智能·ai·媒体
小小坦克手2 小时前
实验不能停:docker 部署支持用户名的redis容器
运维·数据库·redis
想学好C++的oMen2 小时前
Linux环境变量
linux·运维
java1234_小锋2 小时前
Zookeeper的通知机制是什么?
linux·分布式·zookeeper