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;
相关推荐
NamoAmitabha1284 小时前
libpng12-0 1.2.54-1ubuntu1.1 (amd64 binary) in ubuntu xenial
linux·ubuntu20.4
Madison-No74 小时前
搭建项目测试环境
linux·运维·服务器·python
吴声子夜歌5 小时前
Shell编程实例——编写安全的shell脚本(二)
linux·运维·shell
悠悠121386 小时前
微服务通信别只看性能:REST 与 gRPC 的 6 个选型判断和一次 502 故障复盘
运维·服务器
xiaoye-duck7 小时前
《Linux 网络编程》深入理解 IP 协议(二):网段划分、私有 IP 与 NAT 地址转换
linux·网络·ip
zx_741484817 小时前
【Linux入门】Shell 函数、正则表达式与文本处理:cut 与 awk
linux·运维·正则表达式
Zenova EdgeOS8 小时前
Linux dmesg 工业边缘实战:内核日志过滤、持久化与故障定位
linux·运维·边缘计算·工业边缘·dmesg·内核日志
金士顿8 小时前
System.Text.Json Source Generator 深度解析:为什么 Native AOT 不喜欢反射
linux·asp.net core·arm64·net·native aot
wdfk_prog9 小时前
ROS教程08:从 TransportTCP::connect() 追到 TCPROS Connection Header、序列化与 Socket 数据传输
运维·缓存·docker·容器·ros
做运维的阿瑞9 小时前
Python 标准库汇总:分类速览与常用模块清单
linux·运维·python