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;
相关推荐
菜鸟xy..几秒前
windows server 2008 建立ftp服务器
运维·服务器
dzq19813 分钟前
Hexo提交部署命令与Git Bash Here控制终端中按下Ctrl+C无法中断hexo s的解决办法
运维·git·hexo·部署博客·hexo s·ctrl+c·源码推送
团儿.24 分钟前
KVM磁盘配置:构建高效虚拟环境的基石
linux·运维·centos·kvm·kvm磁盘
zhqh1001 小时前
在qemu-system上跑arm-Debian
linux·arm开发·debian
昨天今天明天好多天1 小时前
【Linux】Redis 部署
linux·redis·bootstrap
hanzhuhuaa1 小时前
Linux 查看 nginx 安装目录和配置文件路径
linux·nginx
CloudJourney2 小时前
初始Docker
运维·docker·容器
惊鸿一博2 小时前
linux_电脑一运行程序就死机怎么处理?
linux·运维·电脑
环能jvav大师2 小时前
使用Ubuntu系统+VS Code开发STC51单片机
linux·c语言·开发语言·单片机·嵌入式硬件·ubuntu
SG.xf2 小时前
Ansible
运维·ansible