一、MongoDB
MongoDB是一种开源、面向文档的分布式数据库系统,它采用NoSQL(非关系型数据库)模型,由C++编写,并设计用于处理大量数据和高并发场景。
以下是关于MongoDB数据库的主要特点和功能概述:
1. 面向文档:
MongoDB以JSON-like的文档形式存储数据,每个文档可以拥有动态模式,即一个集合中的文档可以有不同的字段和结构,这使得它非常适合处理半结构化和非结构化的数据。
2. 灵活的数据模型:
不同于传统的关系型数据库,MongoDB不强制预先定义严格的表结构,允许开发者根据需求自由调整数据结构。
3. 分布式存储:
MongoDB支持水平扩展,通过分片技术将数据分布在多个服务器上,能够有效应对大数据量和高并发访问的需求。
4. 高性能:
MongoDB的设计旨在提供高性能读写操作,支持快速的索引创建和查询优化,以及在内存中缓存常用数据等功能来提升性能。
5. 自动分片与负载均衡:
MongoDB能自动管理数据分布并进行负载均衡,确保整个集群的高效运行。
6. 强大的查询能力:
MongoDB支持丰富的查询表达式和聚合框架,可以执行复杂的条件查询、更新、排序、聚合等多种操作。
7. 高可用性与容错性:
通过复制集(Replica Set)实现数据冗余备份和故障转移,保证服务的连续性和数据安全性。
8. 支持多种语言驱动程序:
MongoDB提供了对多种编程语言的支持,包括但不限于Python、Java、C#、Node.js、PHP等,方便开发人员进行应用程序集成。
9. Schema Validation:
自MongoDB 3.2版本开始,支持了schema验证功能,可以在集合级别设置规则来约束插入或更新的数据格式。
10. 安全认证与授权:
MongoDB支持用户身份验证和角色权限管理,可以细粒度地控制不同用户的数据库操作权限。
二、安装小记
MongoDB从发行版本分为社区版和企业版,从部署方式可分为单机、主从、副本集(Replica Set)和分片(Sharding)四种模式,其中主从模式已经不建议使用。本次安装因环境受限,仅安装单机模式,操作系统为CentOS 7.8.2003,数据库版本为3.6.19 Enterprise。
使用vim /etc/yum.repos.d/mongodb-enterprise.repo创建yum源,文件内容如下图,使用yum install -y mongodb-enterprise完成安装。
安装教程:https://blog.csdn.net/qq_45790877/article/details/129286309
三、MongoDB介绍
3.1 MongoDB 配置文件
通过yum安装完成后,配置文件默认位于/etc/mongod.conf,文件内容使用YAML格式,配置参数前需空两格,如下图所示。默认启用的配置为系统日志、存储、进程管理和网络,身份鉴别功能配置参数位于security下,需管理员手动开启并配置。其他如传输加密、数据加密、安全审计等功能均在此配置。
关于bindIp,发现有部分人对它产生了误解,这里简单说明一下,bindIp是对服务器上指定的ip接口进行监听,如下图所示参数为127.0.0.1,那么MongoDB仅对本机提供服务,网段内的其他服务器无法连接该MongoDB;假设这个参数为192.168.172.134,那么网段内的其他服务器均可连接该MongoDB,而本机无法直接,需通过host参数指定192,168.172.134才可连接MongoDB
3.2 MongoDB 启动
MongoDB有三种启动方式,1)通过命令systemctl start mongod.serivce启动,该方式将身份鉴别配置写入配置文件,启动时直接调用配置文件中启用的配置。如下图所示,无报错则启动成功;
2)通过命令mongod -f /etc/mongod.conf启动,该方式将身份鉴别配置写入任意位置的配置文件,启动时指定配置文件调用已启用的配置。如下图所示,提示进程启动成功;
3.3 MongoDB 登录
MongoDB一般通过mongo shell或者第三方管理工具连接(如navicat),通过mongo shell连接可直接在操作系统命令行输入mongo登录数据库,如下图所示为未开启身份鉴别功能的界面:
如果在配置文件中修改了端口号,还需指定port参数才可连接,如果bindIp不为127.0.0.1或0.0.0.0,则还需要指定ip才能连接成功。
开启身份鉴别功能后无警告信息,操作前必须使用db.auth()进行登录。
通过第三方工具连接前需先在配置文件中绑定与外部连接的ip,如主机的本地ip为192.168.172.134,则在配置文件中bindIp处添加此ip,如下图所示:
填写服务器ip后添加即可连接。
3.4 MongoDB 账户及角色
在MongoDB刚安装完成时,默认未启用身份鉴别功能且未不存在默认账户,仅存在默认的数据库角色,需管理员登录数据库创建管理员账户后再开启身份鉴别功能。在MongoDB中创建账户时除账户、口令外,还需指定角色及可访问的数据库,创建账户时的roles中包括role和db两个参数,可指定多个role和db,role为分配给账户的角色,通过角色来实现权限的控制,db为指定可以访问的数据库,该账户创建成功后仅可访问指定的数据库。如下表列出的为MongoDB中默认的角色。
|-----------|----------------------|--------------------------------------------------------------------------------------------------|
| 分类 | 角色 | 简介 |
| 数据库用户角色 | read | 允许用户读取指定数据库 |
| 数据库用户角色 | readWrite | 允许用户读写指定数据库 |
| 数据库管理角色 | dbAdmin | 指定数据库的管理员 |
| 数据库管理角色 | dbOwner | 代表数据库所有者,拥有最高该数据库最高权限。比如新建索引等 |
| 数据库管理角色 | userAdmin | 允许用户向system.users写入,可以找指定数据库里创建、删除和管理用户 |
| 集群管理角色 | clusterAdmin | / |
| 集群管理角色 | clusterManager | / |
| 集群管理角色 | clusterMonitor | / |
| 集群管理角色 | hostManager | / |
| 备份恢复角色 | backup | 备份功能账户 |
| 备份恢复角色 | restore | 还原功能账号 |
| 管理所有数据库角色 | readAnyDatabase | 赋予用户所有数据库的读权限 |
| 管理所有数据库角色 | readWriteAnyDatabase | 赋予用户所有数据库的读写权限 |
| 管理所有数据库角色 | userAdminAnyDatabase | 赋予用户所有数据库的userAdmin权限 |
| 管理所有数据库角色 | dbAdminAnyDatabase | 赋予用户所有数据库的dbAdmin权限 |
| 超级用户角色 | root | 提供对readWriteAnyDatabase,dbAdminAnyDatabase,userAdminAnyDatabase,clusterAdmin,恢复和备用组合的操作和所有资源的访问。 |
| 内部角色 | __system | 提供对数据库中的任何 object 采取任何操作的权限。**除了在特殊情况下,不要将此角色分配给代表 applications 或人工管理员的用户 objects。 |
通过mongo命令连接后,使用use admin切换至admin数据库,通过如下命令创建管理员账户:
db.createUser( { user: "dba", pwd: "dba", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })
登录:db.auth("dba","dba")
接下来可到配置文件中开启身份鉴别功能。
3.5 MongoDB 关闭
如需管理MongoDB服务,可通过以下几种方式实现。
使用systemctl start mongod.service启动后,可使用systemctl stop mongod.service关闭MongoDB。
启动失败解决办法:
1创建配置文件:
sudo nano [lc1] /etc/systemd/system/mongodb.service
2.在里面追加文本:
[Unit]
Description=High-performance, schema-free document-oriented database[lc2]
After=network.target
表示 MongoDB 服务将在网络服务启动后启动。这是一种依赖关系,确保在网络服务准备就绪后再启动 MongoDB。
[Service]
User=mongodb
ExecStart=/usr/bin/mongod --quiet[lc3] --config /etc/mongod.conf
[Install]
WantedBy=multi-user.target[lc4]
在这种模式下,系统进入了多用户状态,允许多个用户通过网络或本地登录系统并运行各种服务。
3.按ctrl+X退出
4.启动服务
sudo systemctl start mongodb
sudo systemctl status mongodb
5.让它永久启动
sudo systemctl enable mongodb
ps -ef | grep mongo: ps -ef 是用标准的格式显示进程的
使用mondog启动后可在mongo shell中使用db.shutdownServer()关闭MongoDB。
除上述两种方法外,还可通过kill -9 加上mongo服务的pid强制关闭mongo进程。或者mongod --config ./mongodb.conf --shutdown