Linux环境下Mongodb部署

发布于:2024-11-02 ⋅ 阅读:(6) ⋅ 点赞:(0)


在这里插入图片描述

一、系统环境

  • CentOS Stream 9 64bit
    在这里插入图片描述

二、MongoDb安装

添加MongoDB官方库

  1. 执行以下命令
sudo vim /etc/yum.repos.d/mongodb-org-4.4.repo
  1. 在文件中添加以下内容
[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

  • 执行以下命令
sudo yum install mongodb-org -y

配置MongoDB

  1. 打开配置文件
sudo vim /etc/mongod.conf
  1. 以下为mongodb常见配置及说明
# 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
sudo systemctl start mongod
  1. 关闭MongoDB
sudo systemctl stop mongod
  1. 重启MongoDB
sudo systemctl restart mongod
  1. 查看当前MongoDB状态
sudo systemctl status mongod
  1. 将MongoDB设置为系统服务
sudo systemctl enable mongod
  1. 登录MongoDB
mongo

四、MongoDB用户管理

创建用户

  1. 切换到admin数据库:use admin
  2. 创建管理员admin
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
db.createUser({ user: "root", pwd: "123456", roles: [
  { role: "root", db: "admin" }
]});
- `root`权限也只能放在`admin`数据库内才能生效
- `root`是最高权限,可以做任何事情
  1. 创建普通用户zhangsan
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目录
# 启用安全控制
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 备份文件存储目录
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
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驱动为例):
{
  "name": "mongodb_test",
  "version": "0.0.0",
  ...
  "dependencies": {
    ...
    "mongoose": "^8.4.0",
    ...
  }
  ...
}
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;