下载
点击这里下载.将压缩包下载到本地,通过 ftp
工具将压缩包上传到服务端的的 /usr/local/mongodb
目录下,没有 mongodb
文件夹就自己新建一个.
- 选择版本
4.0.9
- 选择操作系统
Linux 64-bit legacy x64
- 选择package TGZ
安装
解压,并将解压文件放到 /usr/local/mongodb
文件夹内
tar -zxvf mongodb-linux-x86_64-4.0.9.tgz
# 此时会在mongodb文件夹内生成一个mongodb-linux-x86_64-4.0.9文件夹,我们需要把里面的文件移动到外面,没必要多嵌套这一层文件夹
cd mongodb-linux-x86_64-4.0.9
mv * /usr/local/mongodb
# 现在可以把mongodb-linux-x86_64-4.0.9文件夹删了
配置系统文件profile,生成环境变量
编辑 /etc/profile
文件
# sudo可忽略
vi /etc/profile
# 插入如下内容
# mongodb环境变量
export MONGODB_HOME=/usr/local/mongodb
export PATH=$PATH:$MONGODB_HOME/bin
注意:修改 /etc/profile
文件尽量用 vi
命令,而不是用 hbuilderx
等编辑器,使用编辑器修改文件会报错 ': not a vaild identifier
,这可能时因为编辑器对文档做了无谓的修改造成的.
注意保存后要重启系统配置:
source /etc/profile
创建用于存放数据和日志文件的文件夹,并修改其权限增加读写权限
cd /usr/local/mongodb
mkdir -p data/db # -p的意思是可以多层创建
chmod 777 data/db
mkdir logs
cd logs
touch mongodb.log
mongodb启动配置
cd /usr/local/mongodb/bin
vi mongodb.conf
输入以下内容:
dbpath = /usr/local/mongodb/data/db #数据文件存放目录
logpath = /usr/local/mongodb/logs/mongodb.log #日志文件存放目录
logappend = true #以追加的方式记录日志
port = 27017 #端口
fork = true #以守护程序的方式启用,即在后台运行
# 授权登陆的相关设置
# auth = true # 设置为true后必须添加mongodb用户,否则无法远程连接,见下文
bind_ip = 0.0.0.0 # 指定所有ip可访问,外部访问入 mongodb compass访问时必须打开
这里要提前了解下,我们等下会以配置文件的方式启动 mongod
程序,如果不用配置文件就需要用 mongod --dbpath=xxx
的方式,这当然不如配置文件方便.
全部配置如下:
- 基本配置
配置参数 | 说明 |
---|---|
-f [ --config ] arg | configuration file specifying additional options |
--quiet | # 安静输出 |
--port arg | # 指定服务端口号,默认端口27017 |
--bind_ip arg | # 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP |
--logpath arg | # 指定MongoDB日志文件,注意是指定文件不是目录 |
--logappend | # 使用追加的方式写日志 |
--pidfilepath arg | # PID File 的完整路径,如果没有设置,则没有PID文件 |
--keyFile arg | # 集群的私钥的完整路径,只对于Replica Set 架构有效 |
--unixSocketPrefix arg | # UNIX域套接字替代目录,(默认为 /tmp) |
--fork | # 以守护进程的方式运行MongoDB,创建服务器进程 |
--auth | # 启用验证 |
--cpu | # 定期显示CPU的CPU利用率和iowait |
--dbpath arg | # 指定数据库路径 |
--diaglog arg | # diaglog选项 0=off 1=W 2=R 3=both 7=W+some reads |
--directoryperdb | # 设置每个数据库将被保存在一个单独的目录 |
--journal | # 启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里 |
--journalOptions arg | # 启用日志诊断选项 |
--ipv6 | # 启用IPv6选项 |
--jsonp | # 允许JSONP形式通过HTTP访问(有安全影响) |
--maxConns arg | # 最大同时连接数 默认2000 |
--noauth | # 不启用验证 |
--nohttpinterface | # 关闭http接口,默认关闭27018端口访问 |
--noprealloc | # 禁用数据文件预分配(往往影响性能) |
--noscripting | # 禁用脚本引擎 |
--notablescan | # 不允许表扫描 |
--nounixsocket | # 禁用Unix套接字监听 |
--nssize arg (=16) | # 设置信数据库.ns文件大小(MB) |
--objcheck | # 在收到客户数据,检查的有效性, |
--profile arg | # 档案参数 0=off 1=slow, 2=all |
--quota | # 限制每个数据库的文件数,设置默认为8 |
--quotaFiles arg | # number of files allower per db, requires --quota |
--rest | # 开启简单的rest API |
--repair | # 修复所有数据库run repair on all dbs |
--repairpath arg | # 修复库生成的文件的目录,默认为目录名称dbpath |
--slowms arg (=100) | # value of slow for profile and console log |
--smallfiles | # 使用较小的默认文件 |
--syncdelay arg (=60) | # 数据写入磁盘的时间秒数(0=never,不推荐) |
--sysinfo | # 打印一些诊断系统信息 |
--upgrade | # 如果需要升级数据库 |
- Replicaton 参数
配置参数 | 说明 |
---|---|
--fastsync | # 从一个dbpath里启用从库复制服务,该dbpath的数据库是主库的快照,可用于快速启用同步 |
--autoresync | # 如果从库与主库同步数据差得多,自动重新同步, |
--oplogSize arg | # 设置oplog的大小(MB) |
- 主/从参数
配置参数 | 说明 |
---|---|
--master | # 主库模式 |
--slave | # 从库模式 |
--source arg | # 从库 端口号 |
--only arg | # 指定单一的数据库复制 |
--slavedelay arg | # 设置从库同步主库的延迟时间 |
- Replica set(副本集)选项
配置参数 | 说明 |
---|---|
--replSet arg | # 设置副本集名称 |
- Sharding(分片)选项
配置参数 | 说明 |
---|---|
--configsvr | # 声明这是一个集群的config服务,默认端口27019,默认目录/data/configdb |
--shardsvr | # 声明这是一个集群的分片,默认端口27018 |
--noMoveParanoia | # 关闭偏执为moveChunk数据保存 |
上述参数都可以写入 mongodb.conf 配置文档里,也可以
./mongod -shardsvr -replSet shard1 -port 16161 -dbpath /data/mongodb/data/shard1a -oplogSize 100 -logpath /data/mongodb/logs/shard1a.log -logappend -fork -rest
另外: 需要特别注意 bind_ip
与 auto
的设置,这里是授权登陆的相关设置.
启动mongod数据库服务,以配置文件的方式启动
cd /usr/local/mongodb/bin
# 看上文参数知道 -f 同 --config,指定启动时的配置文件
./mongod -f mongodb.conf
如果启动时报错,见下文解决方法.
连接mongodb数据库
./mongo
进入交互界面
# 可以简单试下
show dbs
# ctrl+c退出
此时,你也可以通过本地的 MongoDB Compass
可视化软件来连接了
Hostname 139.196.169.192 #安装mongodb数据的服务器ip地址
Port 27017
Authentication none # 选择none,因此此时我们没有开授权模式,还记得配置文件的auth吗?
注意: 如果连接不了,记得去阿里云的安全组把 27017
入网端口号打开
mongod 启动失败
通过 mongod -f /usr/local/mongodb/bin/mongodb.conf
时报错 xxxAddress already in usexxx
解决方法:
# 找到mongod进程,并查看pid
netstat -anp|more
# ps -ef|grep mongo 查看mongo进程数 第二列就是进程id (获取pid的方法二,一般会查出两条数据,找带mongod启动配置文件路径的那条)
kill -9 pid
#杀死进程后再执行即可
开机自启动设置
vi /etc/rc.d/rc.local
# 在文件后面加上这行
/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb.conf
关闭 mongod
进程
# 你当然可以通过kill 的方式来结束进程,但更推荐下面
# 必须指定 --dbpath 否则报错,说data/db下没有运行的数据库
mongod --shutdown --dbpath=/usr/local/mongodb/data/db
关于授权模式
mongodb
默认不需要账号密码即可登陆,但这不是很安全.配置文件如果设置 auth = true
,则(远程)登陆时必须指定用户名与密码.
进入服务器终端,(我们新建两个用户,一个超级用户root,一个具体有所有数据的读写能力的admin用户)
mongo
# 进入交互界面
> use admin
# 创建root超级用户
> db.createUser({user:'root',pwd: 'bluej1234',roles:["root"]})
# 再创建 admin 用户
db.createUser({user:'admin',pwd: 'bluej1234',roles:[{ role:"userAdminAnyDatabase",db:'admin'},{role:'readWriteAnyDatabase',db:'admin'}]})
此时我们通过 MongoDB Compass
来连接数据是必须指定用户名与密码
Hostname 139.196.169.192
Port 27017
Authentication Username/Password
Username root # 或者admin
Password bluej1234
在服务器终端交互界面进行授权操作
> auth('root','bluej1234')
mongondb 的角色
Built-In Roles(内置角色):
- 数据库用户角色:read、readWrite;
- 数据库管理角色:dbAdmin、dbOwner、userAdmin;
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
- 备份恢复角色:backup、restore;
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase) - 内部角色:__system
具体角色:
- Read:允许用户读取指定数据库
- readWrite:允许用户读写指定数据库
- dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
- userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
- clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
- readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
- readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
- userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
- dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
- root:只在admin数据库中可用。超级账号,超级权限
权限模式下通过mongoose连接数据库方式
const mongoose = require("mongoose");
// 链接到 project_fileManger 数据库
// 核心代码start
// 不仅要设置账号密码还是设置 authSource=admin 表示鉴权源库
var dbUrl = `mongodb://root:bluej1234@localhost:27017/project_fileManager?authSource=admin`;
// connect() 返回一个状态待定(pending)的连接, 接着我们加上成功提醒和失败警告。
mongoose.connect(dbUrl, {useNewUrlParser:true} ,(err,connection) => {
// 等同于监听了 mongoose.connection 的 error 和 connected 事件
if (err) {
console.log('Mongoose connection error: ' + err.message)
} else {
console.log('数据库连接成功~')
}
})
mongoose.connection.on('disconnected', function () {
console.log('Mongoose connection disconnected')
})
module.exports = mongoose;
网友评论