简介
- MongoDB 是一个基于分布式 文件存储的NoSQL数据库
- 由C++语言编写,运行稳定,性能高
- 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案
- 查看官方网站
MongoDB特点
- 模式自由 :可以把不同结构的文档存储在同一个数据库里
- 面向集合的存储:适合存储 JSON风格文件的形式
- 完整的索引支持:对任何属性可索引
- 复制和高可用性:支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目的是提供冗余及自动故障转移
- 自动分片:支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器
- 丰富的查询:支持丰富的查询表达方式,查询指令使用JSON形式的标记,可轻易查询文档中的内嵌的对象及数组
- 快速就地更新:查询优化器会分析查询表达式,并生成一个高效的查询计划
- 高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)
Packages包说明
MongoDB官方源中包含以下几个依赖包:
mongodb-org: MongoDB元数据包,安装时自动安装下面四个组件包:
1.mongodb-org-server: 包含MongoDB守护进程和相关的配置和初始化脚本。
2.mongodb-org-mongos: 包含mongos的守护进程。
3.mongodb-org-shell: 包含mongo shell。
4.mongodb-org-tools: 包含MongoDB的工具: mongoimport, bsondump, mongodump, mongoexport, mongofiles, mongooplog, mongoperf, mongorestore, mongostat, and mongotop。
安装步骤
1.设置yum源
创建仓库文件
vim /etc/yum.repos.d/mongodb-org-4.0.repo
- 加入以下内容
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
2.下载安装mongo
yum install -y mongodb-org
验证下载结果
rpm -qa |grep mongodb
mongodb-org-shell-4.0.13-1.el7.x86_64
mongodb-org-server-4.0.13-1.el7.x86_64
mongodb-org-mongos-4.0.13-1.el7.x86_64
mongodb-org-4.0.13-1.el7.x86_64
mongodb-org-tools-4.0.13-1.el7.x86_64
3.启动mongod服务
# 查看 mongod 服务的状态
systemctl status mongod
# 开启 mongod 服务
systemctl start mongod
# 设置 mongod 服务开机自启
systemctl enable mongod
# 确认mongod服务已开启成功后,进入 mongoDB 命令行交互模式
mongo --port 27017
查看日志 tmp目录没有权限导致
使用mongodb参数--nounixsocket
mongod --config /etc/mongod.conf --nounixsocket --fork
或者修改tmp目录权限
如果无法修改,可以尝试chattr -i /tmp
4.创建用户和设置远程访问
创建管理员
use admin;
db.createUser({user: "admin",pwd: "123456",roles:[{ role:"root", db: "admin"} ]});
- 创建语句的意思是给admin数据库创建用户名为admin的超级管理员用户,为了方便后面权限认证建议使用root权限
创建数据库用户
use zzw;
- 没有zzw会自动创建可以理解为创建用户
db.createUser({ user: 'zhangzhiwen', pwd: '123456', roles: [ { role: "dbOwner", db: "zzw" } ] });
- 没授权之前可以在任意地方创建用户,用户都可以在admin数据库中查找出来
- 简单列取mongo数据库相关权限
数据库用户角色:read、readWrite;
数据库管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
备份恢复角色:backup、restore
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色:root
设置远程访问
- 编辑mongod.conf注释bindIp,并重启mongodb.(这句配置代表只能本机使用,所以需修改)
设置为 0.0.0.0
vim /etc/mongod.conf
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or,
5.授权模式启动mongo服务
vim /etc/mongod.conf
添加以下内容开启授权模式
security:
authorization: enabled
重启mongod
systemctl restart mongod;
- 如果报错Job for mongod.service failed because the control process exited with error code. See "systemctl status mongod.service" and "journalctl -xe" for details.做如下操作
rm -f /tmp/mongodb-27017.sock
重启mongod
systemctl restart mongod;
数据库备份、还原创建及用户权限配置
#备份数据库:
mongodump -h 192.168.3.8 -d AICloudSaas -o /home/mongodb-bak/AICloudSaas -u root -p root@sxt --authenticationDatabase admin
#还原数据库:
mongorestore -h 10.9.115.81 -u auth -p p@ssw0rd -d AICloudSaas /home/mongodbBak/AICloudSaas --authenticationDatabase AICloudSaas
#复制数据库:
db.copyDatabase(fromdb, todb, fromhost, username, password, mechanism)
db.copyDatabase("adminSXTAuthorityCenterV2_0","SXTAuthorityCenterV2_0bak","127.0.0.1:27017","root","root@sxt","SCRAM-SHA-1")
#当前库的配置 需要使用当前库的用户名
db.copyDatabase("SXTBackFrameWork2_0","ThirdInterface","192.168.3.8","auth","p@ssw0rd")
#创建普通用户
use DevThirdInterface
db.createUser({
user:"auth",
pwd:"p@ssw0rd",
roles:[{
role:"dbAdmin",
db:"DevThirdInterface"
},{
role:"readWrite",
db:"DevThirdInterface"
}]
})
db.auth("auth", "p@ssw0rd")
#创建数据库:
db.foo.insert({_id:1,name:"SXTAuthorityCenterV2_0"})
#配置复制数据库管理员权限
use admin
db.copyDatabase("admin","admin","121.46.23.159:1236","admin","root@sxt","SCRAM-SHA-1")
db.system.users.remove({user:"admin"})
db.createUser(
{
user: "admin",
pwd: "root@sxt",
roles: [
{role: "root", db: "admin"},
{role: "backup", db: "admin"},
{role: "restore", db: "admin"}
]
}
)
db.auth("admin", "root@sxt")
#添加并认证管理员
use admin
db.createUser({
user:"root",
pwd:"p@ssw0rd",
roles:[{
role:"root",
db:"admin"
}]
})
db.auth("root", "p@ssw0rd")
#读写权限
use SXTAuthorityCenterV2_0
db.createUser({
user:"auth",
pwd:"p@ssw0rd",
roles:[{
role:"dbAdmin",
db:"SXTAuthorityCenterV2_0"
},{
role:"readWrite",
db:"SXTAuthorityCenterV2_0"
}]
})
db.auth("auth", "p@ssw0rd")
--------------------------------------------------数据库角色说明:
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
-----------------------------------------------------------------------------------------
#删除用户:
db.system.users.remove({user:"用户名"})
#查看用户:
db.system.users.find()