linux 下安装 mongodb

下载

点击这里下载.将压缩包下载到本地,通过 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_ipauto 的设置,这里是授权登陆的相关设置.

启动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(内置角色):

  1. 数据库用户角色:read、readWrite;
  1. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  2. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  3. 备份恢复角色:backup、restore;
  4. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  5. 超级用户角色:root
    // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
  6. 内部角色:__system

具体角色:

  1. Read:允许用户读取指定数据库
  1. readWrite:允许用户读写指定数据库
  2. dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
  3. userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
  4. clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  5. readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
  6. readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
  7. userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
  8. dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
  9. 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;

你可能感兴趣的:(linux 下安装 mongodb)