持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情
MongoDB三种安装方式
一、MongoDB的安装
1-1、linux安装MongoDB
1-1-1、环境准备:
- linux系统: centos7
- 安装MongoDB社区版
下载MongoDB Community Server
下载地址:www.mongodb.com/try/downloa…
#下载MongoDB
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.9.tgz
tar -zxvf mongodb-linux-x86_64-rhel70-4.4.9.tgz
1-1-2、启动MongoDB Server
#创建dbpath和logpath
mkdir -p /mongodb/data /mongodb/log
#进入mongodb目录,启动mongodb服务
bin/mongod --port=27017 --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log \ --bind_ip=0.0.0.0 --fork
--dbpath :指定数据文件存放目录
--logpath :指定日志文件,注意是指定文件不是目录
--logappend :使用追加的方式记录日志
--port:指定端口,默认为27017
--bind_ip:默认只监听localhost网卡
--fork: 后台启动
--auth: 开启认证模式
1-1-3、添加环境变量
修改/etc/profile,添加环境变量,方便执行MongoDB命令
export MONGODB_HOME=/usr/local/soft/mongodb
PATH=$PATH:$MONGODB_HOME/bin
然后执行source /etc/profile 重新加载环境变量
1-1-4、利用配置文件启动服务
编辑/mongodb/conf/mongo.conf文件,内容如下:其中如果是用虚拟机最好配置一下缓存大小,防止无法启动
systemLog:
destination: file
path: /mongodb/log/mongod.log # log path
logAppend: true
storage:
dbPath: /mongodb/data # data directory
engine: wiredTiger #存储引擎
journal: #是否启用journal日志
enabled: true
wiredTiger: #配置内存缓存为512MB
engineConfig:
configString : cache_size=512M
net:
bindIp: 0.0.0.0
port: 27017 # port
processManagement:
fork: true
注意:一定要yaml格式
启动mongod
mongod -f /mongodb/conf/mongo.conf
-f 选项表示将使用配置文件启动mongodb
1-1-5、关闭MongoDB服务
方式1:
mongod --port=27017 --dbpath=/mongodb/data --shutdown
方式2: 进入mongo
mongo
切换到admin,进行退出
use admin
db.shutdownServer()
如下图,停止之后,再次使用show dbs提示无法连接
1-2、Mongo shell使用
mongo是MongoDB的交互式JavaScript Shell界面,它为系统管理员提供了强大的界面,并为开发人员提供了直接测试数据库查询和操作的方法。
bin/mongo --port=27017
bin/mongo localhost:27017
--port:指定端口,默认为27017
--host:连接的主机地址,默认127.0.0.1
1-2-1、JavaScript支持
mongo shell是基于JavaScript语法的,MongoDB使用了SpiderMonkey作为其内部的JavaScript解释器引擎,这是由Mozilla官方提供的JavaScript内核解释器,该解释器也被同样用于大名鼎鼎的Firefox浏览器产品之中。SpiderMonkey对ECMA Script标准兼容性非常好,可以支持ECMA Script 6。可以通过下面的命令检查JavaScript解释器的版本:
1-2-2、mongo shell常用命令
| 命令 | 说明 |
|---|---|
| show dbs 或者 show databases | 显示数据库列表 |
| use 数据库名 | 切换数据库,如果不存在创建数据库 |
| db.dropDatabase() | 删除数据库 |
| show collections 或者 show tables | 显示当前数据库的集合列表 |
| db.集合名.stats() | 查看集合详情 |
| db.集合名.drop() | 删除集合 |
| show users | 显示当前数据库的用户列表 |
| show roles | 显示当前数据库的角色列表 |
| show profile | 显示最近发生的操作 |
| load("xxx.js") | 执行一个JavaScript脚本文件 |
| exit 或者 quit() | 退出当前shell |
| help | 查看mongodb支持哪些命令 |
| db.help() | 查询当前数据库支持的方法 |
| db.集合名.help() | 显示集合的帮助信息 |
| db.version() | 查看数据库版本 |
1-2-3、数据库操作
#查看所有库
show dbs
# 切换到指定数据库,不存在则创建
use test
# 删除当前数据库
db.dropDatabase()
1-2-4、集合操作
#查看集合
show collections
#创建集合
db.createCollection("emp")
#删除集合
db.emp.drop()
1-2-5、创建集合语法
db.createCollection(name, options)
options参数
| 字段 | 类型 | 描述| | ------ | -- | -------------- | | | capped | 布尔 | (可选)如果为true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 | | size | 数值 | (可选)为固定集合指定一个最大值(以字节计)。如果 capped 为 true,也需要指定该字段。 | | max | 数值 | (可选)指定固定集合中包含文档的最大数量。
注意: 当集合不存在时,向集合中插入文档也会创建集合
1-3、安全认证
1-3-1、创建管理员账号
# 设置管理员用户名密码需要切换到admin库
use admin
#创建管理员
db.createUser({user:"jony",pwd:"111111",roles:["root"]})
# 查看当前数据库所有用户信息
show users
#显示可设置权限
show roles
#显示所有用户
db.system.users.find()
创建用户命令如下:
1-3-2、常用权限
| 权限名 | 描述 |
|---|---|
| read | 允许用户读取指定数据库 |
| readWrite | 允许用户读写指定数据库 |
| dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile |
| dbOwner | 允许用户在指定数据库中执行任意操作,增、删、改、查等 |
| userAdmin | 允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户 |
| clusterAdmin | 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限 |
| readAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读权限 |
| readWriteAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读写权限 |
| userAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 |
| dbAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限 |
| root | 只在admin数据库中可用。超级账号,超级权限 |
重新赋予用户操作权限
db.grantRolesToUser( "jony" , [
{ role: "clusterAdmin", db: "admin" } ,
{ role: "userAdminAnyDatabase", db: "admin"},
{ role: "userAdminAnyDatabase", db: "admin"},
{ role: "readWriteAnyDatabase", db: "admin"}
])
删除用户
db.dropUser("jony")
#删除当前数据库所有用户
db.dropAllUser()
用户认证,需要注意的是,需要切换到对应db中,再给对应的用户授权,否则会授权失败;进入对应的库中授权,返回1表示认证成功,只有授权成功才能进行登录,否则无法登录
使用授权后的用户登录,这样就只能看到账号自己的数据库了
1-3-3、创建应用数据库用户
use appdb
db.createUser({user:"appdb",pwd:"111111",roles:["dbOwner"]})
默认情况下,MongoDB不会启用鉴权,以鉴权模式启动MongoDB
mongod -f /mongodb/conf/mongo.conf --auth
启动授权之后,再使用mongo就无法访问数据库了
启用鉴权之后,连接MongoDB的相关操作都需要提供身份认证。
mongo 192.168.253.131:27017 -u jony -p 111111 --authenticationDatabase=admin
二、Docker安装
#拉取mongo镜像
docker pull mongo:4.4.10
#运行mongo镜像
docker run --name mongo-server -p 29017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=fox \
-e MONGO_INITDB_ROOT_PASSWORD=fox \
-d mongo:4.4.10 --wiredTigerCacheSizeGB 1
默认情况下,Mongo会将wiredTigerCacheSizeGB设置为与主机总内存成比例的值,而不考虑你可能对容器施加的内存限制。
MONGO_INITDB_ROOT_USERNAME和MONGO_INITDB_ROOT_PASSWORD都存在就会启用身份认证(mongod --auth)
#进入容器
docker exec -it mongo-server bash
#进入Mongo shell
mongo -u fox -p fox
#创建用户,赋予test库的操作权限
>use test
>db.createUser({user:"dcl",pwd:"123456",roles:["readWrite"]})
进入mongo shell
#远程连接
mongo 192.168.65.97:29017 -u dcl -p 123456
dcl用户只具备test库的readWrite权限
三、MongoDB工具
3-1、官方GUI工具——COMPASS
MongoDB图形化管理工具(GUI),能够帮助您在不需要知道MongoDB查询语法的前提下,便利地分析和理解您的数据库模式,并且帮助您可视化地构建查询。
下载地址:www.mongodb.com/zh-cn/produ…
3-2、GUI工具—— Robo 3T(免费)
下载地址:robomongo.org/
3-3、GUI工具——Studio 3T(收费,试用30天)
3-4、MongoDB Database Tools
下载地址:www.mongodb.com/try/downloa…
| 文件名称 | 作用 |
|---|---|
| mongostat | 数据库性能监控工具 |
| mongotop | 热点表监控工具 |
| mongodump | 数据库逻辑备份工具 |
| mongorestore | 数据库逻辑恢复工具 |
| mongoexport | 数据导出工具 |
| mongoimport | 数据导入工具 |
| bsondump | BSON格式转换工具 |
| mongofiles | GridFS文件工具 |