文章目录
一、系统环境
- CentOS Stream 9 64bit
二、MongoDb安装
添加MongoDB官方库
- 执行以下命令
bash
复制代码
sudo vim /etc/yum.repos.d/mongodb-org-4.4.repo
- 在文件中添加以下内容
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
- 如不熟悉vim编辑器操作,可手动在
/etc/yum.repos.d/
目录下创建mongodb-org-4.4.repo
文件,打开文件后,在文件内添加以上文件内容,保存
安装MongoDB
bash
复制代码
sudo yum install mongodb-org -y
配置MongoDB
- 打开配置文件
bash
复制代码
sudo vim /etc/mongod.conf
- 以下为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
- 按需修改配置后,保存关闭
三、MongoDB常见操作
- 启动MongoDB
bash
复制代码
sudo systemctl start mongod
- 关闭MongoDB
bash
复制代码
sudo systemctl stop mongod
- 重启MongoDB
bash
复制代码
sudo systemctl restart mongod
- 查看当前MongoDB状态
bash
复制代码
sudo systemctl status mongod
- 将MongoDB设置为系统服务
bash
复制代码
sudo systemctl enable mongod
- 登录MongoDB
bash
复制代码
mongo
四、MongoDB用户管理
创建用户
- 切换到admin数据库:
use admin
- 创建管理员
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`权限,会报错该数据库没有这个权限的用户。
- 创建超级管理员
root
:
javascript
复制代码
db.createUser({ user: "root", pwd: "123456", roles: [
{ role: "root", db: "admin" }
]});
- `root`权限也只能放在`admin`数据库内才能生效
- `root`是最高权限,可以做任何事情
- 创建普通用户
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" }
]});
- 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: "新密码"})
删除用户
五、启用安全控制
- 修改
mongodb.conf
配置文件:
nginx
复制代码
# 启用安全控制
security:
authorization: enabled
- 重启 MongoDB 服务:
sudo systemctl restart mongod
- 重新进入MongoDB sheel:
mongo
- 选择要验证的数据库:
use admin
- 验证用户信息:
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>
:端口号
-u
:--username=<username>
:用户名
-p
:--password=<password>
:密码
--authenticationDatabase=<db-name>
:验证数据库名
--authenticationMechanism=<mechanism>
:验证机制
-d
:--db=<db-name>
:指定恢复的数据库,如果不指定-d,会从备份目录中获取数据库名
-c
:--collection<collection-name>
:指定恢复的集合,如果不指定-c,会从备份目录中获取集合名
--drop
:导入集合前先删掉集合,不会删除不会备份中的集合
--gzip
:从压缩文件中进行恢复
七、外部工具连接MongoDB
- 可视化管理工具(此处以Navicat示例):
- 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;