@Mr-13
2020-11-26T11:53:27.000000Z
字数 4912
阅读 95
mongodb
Linux
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的 开源数据库系统。
MongoDB 可在 高负载 的情况下,添加更多的节点,可以 保证服务器性能。
MongoDB 可为Web应用提供 可扩展 的 高性能 数据存储解决方案。
MongoDB 将数据存储在灵活的 json 文档中,这意味着可以直接得到从 文档到文档 的数据、结构等。
MongoDB 是免费使用的(MongoDB分 社区版 [在所有环境下都免费] 和企业版[在开发环境免费,生产环境收费] 两个版本)。
MongoDB 数据库具有 可伸缩性 和 灵活性,可帮助你 快速查询 和 索引 你需要数据。
上面都是抄的,不重要,了解一下就好;具体mongodb的优势慢慢学习
mongodb官网地址:https://www.mongodb.com/,按照如下操作复制下载链接:
如下图,在这里根据自己的需要,选择下载对应系统的MongoDB数据库版本
在MongoDB版本中:
偶数
表示正式版【可用于生产环境】;如:3.2.x、3.4.x、3.6.x
奇数
表示开发版,如:3.1.x、3.3.x、3.5.x
如上图,选择 community server
,根据自己的操作系统版本(我使用的Centos7.4)、以及需要下载的mongodb(我这里选择的是4.2.10),以及需要的下载文件格式(我这里选择的是tgz压缩包),选好之后,点击右侧的 copy link
复制下载链接地址。
回到xshell,使用刚才复制的链接下载压缩包:
$ cd /rcs
$ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.10.tgz
解压压缩包,解压完成之后,可以删除压缩包文件。
$ tar -xvzf mongodb-linux-x86_64-rhel70-4.2.10.tgz
为了方便维护管理,重命名解压之后的文件夹名称;文件夹名称根据实际情况确定,不要直接复制执行
$ mv mongodb-linux-x86_64-rhel70-4.2.10 mongodb
配置mongodb环境变量,提醒:具体路径根据实际情况来!
# 向/etc/profile文件末尾追加行
$ echo "export PATH=$PATH:/data/mongodb/bin" >> /etc/profile
# 执行/etc/profile文件使刚才设置的环境变量生效
$ source /etc/profile
# 打印一下环境变量,看一下设置是否生效
$ echo $PATH
进入mongodb目录,进行所需的子目录、及文件创建创建:
# data : 数据库文件存放目录
# log : 日志文件存放路径
# conf : 配置文件存放路径
$ mkdir /data/mongodb/{data,log,conf,pid}
$ touch /data/mongodb/log/mongod.log # 日志文件
$ touch /data/mongodb/conf/mongo.conf # 配置文件
$ touch /data/mongodb/pid/mongod.pid # pid文件
设置文件夹权限
$ cd /data/mongodb
$ chmod 777 data
$ chmod 777 log
$ chmod 777 pid
编辑刚才创建的配置文件 /data/mongodb/conf/mongodb.conf
内容如下:
# 数据库文件存放目录
dbpath=/data/mongodb/data
# 日志文件存放目录
logpath=/data/mongodb/log/mongodb.log
# 端口
port=27017
# 使用追加的方式写日志
logappend=true
# 以守护进程的方式运行,创建服务器进程
fork=true
# 同时最大连接数
maxConns=100
# 不起用验证
noauth=true
# 每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)
# 即使宕机,启动时wiredtiger会先将数据恢复到最近一次的checkpoint,然后重放后续的journal日志来恢复
journal=true
# 存储引擎有mmapv1,wiredtiger,mongorocks
storageEngine=wiredTiger
# 开放外网访问
bind_ip=0.0.0.0
或者YML格式配置文件(和上面的命令行格式配置文件效果一样):
具体的配置内容:路径、文件名根据实际情况定义,不要直接复制粘贴!
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /data/mongodb/log/mongodb.log
# Where and how to store data.
storage:
dbPath: /data/mongodb/data
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 2
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /data/mongodb/pid/mongod.pid # location of pidfile
timeZoneInfo: /usr/share/zoneinfo
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
#security:
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options
.
如上步骤后,开始启动服务:
$ cd ~
$ mongod --config /data/mongodb/conf/mongodb.conf
如果出现上图提示,说明安装启动成功;上图同时打印出了mongodb服务进程的进程号 20090
;
关闭mongodb比较粗暴,直接kill就好:
$ kill [进程号]
在实际生产环境中,我们不可能把没有登录验证的数据库暴露在公网环境下;如果需要设置数据库密码操作如下:
先修改配置文件 /data/mongodb/conf/mongodb.conf
,把之前的 noauth
配置节注释掉,添加如下配置节:
# noauth=true
auth=true
.
.
mongodb密码和传统数据如mysql等有些区别:mongodb的用户名和密码是基于特定数据库的,而不是基于整个系统的;所以所有数据库db都需要单独设置密码。
$ cd ~
$ mongo # 进入mongo数据库
> show dbs # 查看存在的数据;在mongo“新版本”里(没有查具体从哪个版本开始)没有admin库,但不妨碍继续操作
> use admin # 切换到admin库
# 创建管理员账户
> db.createUser({user:"admin",pwd:"admin_pass",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
mongodb中的用户是基于身份 role
的,该管理员账户的role是 userAdminAnyDatabase
;
userAdmin
代表“账户管理员”身份,AnyDatabase
代表可以管理任何数据库。
admin用户用于管理其他数据库账户,不能进行关闭数据库等操作。
用户创建成功会有如下图提示,创建失败则会打印具体原因:
也可以使用如下命令验证用户创建是否成功,如果返回 1 ,则表示存在该用户
# 格式:db.auth([用户名],[密码])
> db.auth("admin","admin_pass")
admin
账号创建好之后,可以继续根据需要创建其他的数据库账号了:
# 进入admin数据库
> use admin
> db.auth("admin","admin_pass")
--------------------------------------------------------------------------
# 创建超级管理员root账户
# 角色:root;root角色用于关闭数据库。
> db.createUser({user: "root",pwd: "password", roles: [ { role: "root", db: "admin" } ]})
# 数据库关闭命令:
# db.shutdownServer()
--------------------------------------------------------------------------
# 创建数据库拥有者角色账户
# 这时候一定,一定要切换到所在数据库上去创建用户,不然创建的用户还是属于admin。
> use yourdatabase
# role:dbOwner 代表数据库所有者角色,拥有最高该数据库最高权限。比如新建索引等
> db.createUser({ user: "youruser", pwd: "yourpassword", roles: [{ role: "dbOwner", db: "yourdatabase" }] })
--------------------------------------------------------------------------
# 新建数据库读写账户
# 该用户用于该数据的读写,只拥有读写权限
> use yourdatabase
> db.createUser({ user: "youruser2", pwd: "yourpassword2", roles: [{ role: "readWrite", db: "yourdatabase" }] })
--------------------------------------------------------------------------
# 删除用户
# 删除账户必须由账号管理员来删,切换到admin角色
> use admin
> db.auth("admin","admin_pass")
# 删除单个账户
db.system.users.remove{(user:"******")}
# 删除所有用户
db.system.users.remove{()}
现在数据的用户名和密码就建好了。
可以使用:mongodb://youruser2:yourpassword2@localhost/yourdatabase来链接
.
数据库用户角色: read、readWrite
数据库管理角色: dbAdmin、dbOwner、userAdmin
集群管理角色: clusterAdmin、clusterManager、clusterMonitor、hostManager
备份恢复角色: backup、restore
所有数据库角色: readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色: root