美文网首页
linux 下安装 mongodb

linux 下安装 mongodb

作者: shuaiutopia | 来源:发表于2019-06-01 16:14 被阅读0次

    下载

    点击这里下载.将压缩包下载到本地,通过 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

          本文链接:https://www.haomeiwen.com/subject/sqjatctx.html