@Mr-13
2020-11-26T11:53:27.000000Z
字数 4912
阅读 114
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,mongorocksstorageEngine=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: filelogAppend: truepath: /data/mongodb/log/mongodb.log# Where and how to store data.storage:dbPath: /data/mongodb/datajournal:enabled: truewiredTiger:engineConfig:cacheSizeGB: 2# how the process runsprocessManagement:fork: true # fork and run in backgroundpidFilePath: /data/mongodb/pid/mongod.pid # location of pidfiletimeZoneInfo: /usr/share/zoneinfo# network interfacesnet:port: 27017bindIp: 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=trueauth=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